我有这个输入
<input type="hidden" name="languages[0][name]" value="xx">
<input type="hidden" name="languages[0][level]" value="yy">
0是一个随着这个输入用javascript动态生成而改变的值。
在我的控制器中,我想要访问这些参数,并按照以下方式执行:
params[:languages].each do |lang|
@job_offer.job_offer_languages.create name: lang[:name], level: lang[:level]
end
end
params[:languages]
是:
{"0"=><ActionController::Parameters {"name"=>"Inglés", "level"=>"Bás̄ico"} permitted: false>} permitted: false>
所以我希望每个人都给我一个名字和等级的哈希,
但是在每个lang
中,键"0"
是一个字符串,而不是参数。
我尝试过fetch和permit,得到了相同的结果。
我使它成功的唯一方法是将其添加为每个中的第一行,但我不明白为什么必须这样做。
...each do |lang|
lang = params[:languages].fetch(lang)
答案 0 :(得分:4)
因为您的params[:language]
是一个哈希each
,会对其条目进行迭代,并将每个条目的key
和value
传递给一个块。因此,要按照您希望的方式访问lang
,您需要执行以下操作:
params[:languages].each do |index, lang|
@job_offer.job_offer_languages.create name: lang[:name], level: lang[:level]
end
end
或使用ActiveSupport接收要迭代的lang值列表:
params[:languages].values.each do |lang|
@job_offer.job_offer_languages.create name: lang[:name], level: lang[:level]
end
end