2014-01-30 26 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

相关问题