2014-05-06 24 views
1

我收到stringify_keys錯誤。構建散列時Stringify鍵出錯

目前我調用下面的方法,它完美的作品:

def attributes 
    { 
    city:   @content[1..20].strip, 
    streetname: @content[21..40].strip, 
    house_number: @content[41..46].strip.to_i 
    } 
end 

現在,我重構我的代碼,我需要從地上爬起來,其中鍵和值填充基於哈希建立的散列在某些條件下(條件尚未寫入)。

def attributes 
    test = {} 
    test["city"]   = @content[1..20].strip 
    test["streetname"] = @content[21..40].strip 
    test["house_number"] = @content[41..46].strip.to_i 
end 

現在我得到了stringify_keys錯誤。我檢查了文檔中關於如何構建哈希的線索,但沒有任何東西可以幫助我。

問題在哪裏?如果您需要更多代碼,請詢問。

+1

代替'測試[ 「城市」]'使用'測試[:城市]'。 –

+0

謝謝,但那也行不通。我仍然收到同樣的錯誤。 –

+1

@Monk_Code說的是真的,你把鑰匙從'Symbol'改爲'String'。另外,你的新方法返回'@content [41..46] .strip.to_i'(方法的最後一個值)的值,而你的舊方法返回整個'Hash'。這也可能導致問題。由於你的'屬性'返回一個'Fixnum',你可能會因爲它而得到'NoMethodError:undefined method'stringify_keys'。在你方法的最後一行用'return test'或者'test'修復。 –

回答

3

關鍵是您的第一段代碼中的符號,您必須在第二段代碼中最後返回test

def attributes 
    test = {} 
    test[:city]   = @content[1..20].strip 
    test[:streetname] = @content[21..40].strip 
    test[:house_number] = @content[41..46].strip.to_i 
    test 
end 
+0

非常感謝,如@Monk_Code和@DaniëlKnippers所述,在最後一行調用'test'後,已經將key從'string'更改爲'symbol'。你能否解釋爲什麼再次調用'test'需要它工作? –

+0

@RobinvanDijk'test'最後和'return test'一樣,ruby會返回上次評估的表達式。 – xdazz

+0

這是有道理的。再次感謝! –

1

Railsactive support可以使用symbolize_keysstringify_keys看看例子:

=> hash = {"foo" => 1, 'baz' => 13} 
    => {"foo"=>1, "baz"=>13} 
    => hash.symbolize_keys 
    => {:foo=>1, :baz=>13} 

和背部:

=> hash.symbolize_keys.stringify_keys 
    => {"foo"=>1, "baz"=>13}