为什么我不能在params中做每一个?

时间:2017-01-27 14:29:36

标签: ruby-on-rails

我有这个输入

<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)

1 个答案:

答案 0 :(得分:4)

因为您的params[:language]是一个哈希each,会对其条目进行迭代,并将每个条目的keyvalue传递给一个块。因此,要按照您希望的方式访问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