通过rails上的ruby中的变量访问哈希

时间:2010-08-16 14:46:42

标签: ruby-on-rails hash

您好我有以下问题。

我有一个填充html参数(params)的哈希:

Parameters:  "info"=>{"parameter2"=>{"r1"=>"aa", "r2"=>"bb", "r3"=>"cc", "r4"=>"dd", "r5"=>"ee"}

您可以像这样访问此值:

<%= params[:info][:parameter2][:r1] %> - &gt;它工作正常

但我有一个循环,并希望通过类似的变量访问这些值:

<% for number_row in (1..@numb_rows) %>

<%= params[:info][:parameter2]["r" + number_row.to_s]  %>

<% end %>

- &GT;它不起作用。 我总是得到这个错误:

  

无法将nil转换为String

但“r1”确实存在。为什么它总是说,它不能将nil转换为String。

如何通过更改变量来访问这些参数?

我需要这样的东西:params [:info] [:parameter2] [@ var]

4 个答案:

答案 0 :(得分:6)

在Ruby中,前面有冒号的东西是Symbol。您得到的错误是正确的,因为您引用的是“r1”,而不是:r1。

您需要使用to_symSymbol制作String

n = "r" + number_row.to_s
params[:info][:parameter2][n.to_sym]

答案 1 :(得分:2)

听起来非常红宝石。尝试

params[:info][:parameter2].each do |key, value|

...

答案 2 :(得分:0)

试试这种方式!

<% params[:info][:parameter2].keys do |key| %>

<%= params[:info][:parameter2][key] %>

<% end %>

答案 3 :(得分:0)

这对我有用:

1.upto(@numb_rows).each do |i|
  puts params['info']['parameter2']["r#{i}"]}
end