获取散列数组中键的值

时间:2014-01-30 19:18:12

标签: ruby-on-rails ruby-on-rails-3 haml

我对rails上的ruby相当新,当我在html.haml文件中使用options_from_collection_for_select时,我在尝试从哈希数组(@sorted)中提取键值时遇到了一些麻烦。

到目前为止,我已经尝试了

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}]

2 个答案:

答案 0 :(得分:1)

使用options_for_select

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

答案 1 :(得分:0)

请记住,当你有一个数组时,它由多个元素组成,你调用它的方法是数组方法,而不是内部元素的方法。

在这种情况下,每个元素都是一个哈希值,因此您的数组如下所示:

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

类本身就是一个数组。您可以像这样索引到一个数组:

myArray[1]

此方法采用整数并找到n元素。这样做:

@sorted[1]

会返回此哈希元素:

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

现在 你可以在它上面调用哈希方法。这就是你得到这个错误的原因,因为Array#[]方法假设你给它一个整数来索引数组,但你给它一个字符串 - 一个无法转换为整数的字符串

因此,在您的特定情况下,您可能意味着这样做:

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

(执行@sorted.first是获取数组中第一个元素的@sorted[0]的替代方法)