2014-01-30 31 views
0

我對rails的ruby相當陌生,在使用options_from_collection_for_select在我的html中嘗試從散列數組(@sorted)提取鍵值時遇到了一些麻煩.haml文件。在散列數組中獲取鍵的值

到目前爲止,我已經試過

options_from_collection_for_select(@sorted, "#{@sorted['id']}", 
"#{@sorted['name']}") 

options_from_collection_for_select(@sorted, @sorted['id'], @sorted['name']) 

但兩者給我一個「不能把字符串轉換爲整數」的錯誤我已經打過電話to_i但錯誤依然存在。

陣列的散列(@sorted)

@sorted => [{"id"=>"51a7ba4154b3289da800000f", "name"=>"Book1", "count"=>8}, 
{"id"=>"519d24ed54b328e512000001", "name"=>"Book2", "count"=>5}, 
{"id"=>"5258917b54b32812cd000003", "name"=>"Book3", "count"=>1}] 
+0

請向我們展示您的'@ sorted'散列的一部分 – xlembouras

回答

1

隨着options_for_select

options_for_select(@sorted.map{|hash| [hash["id"],hash["name"]]}) 
+0

我在我的控制器中做了這個操作,這使得haml結束的事情變得更加清晰,但是這是有效的。在我看到你的答案之前,我已經開始工作了,但你肯定會獲得信任。謝謝! – Rafa

0

請記住,當你有一個陣列,它由多個元件,並且你在其上調用的方法是陣列方法,對於不元素的方法內。

在這種情況下,每個元件是散列,所以你的陣列看起來如下:

[ {"id" => 1, "name" => "Name 1"}, {"id" => 2, "name" => "Name 2" ] 

類本身是一個數組。你可以在像這樣的陣列索引:

myArray[1] 

此方法採用的整數,並且發現n th元素。這樣做:

@sorted[1] 

將返回該哈希元素:

{"id" => 2, "name" => "Name 2"} 

而且現在你可以調用它的哈希方法。這就是爲什麼你得到這個錯誤的原因,因爲Array#[]方法假定你給它一個整數來索引數組,但是你給它一個字符串 - 一個無法轉換爲整數的字符串。

所以你的具體情況,你可能說到做到:

@sorted.first["id"], @sorted.first["name"] 

(做@sorted.first@sorted[0]替代得到一個數組的第一個元素)

+0

這將如何迭代到剩餘的數組ele發言:?如果我的'options_from_collection_for_select'有'@ sorted.first [「id」],@ sorted.first [「name」]'不會總是顯示第一個元素嗎? – Rafa

+0

如果您想了解如何使用該方法的更多信息,請參閱此處的文檔:http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/options_from_collection_for_select但是,我的迴應更像是關於Ruby使用問題。 – MrDanA

相關問題