2017-01-27 9 views
3

私は、この入力なぜ私はparamsでそれぞれ行うことができないのですか?この入力はJavaScriptで動的に生成されるよう

<input type="hidden" name="languages[0][name]" value="xx"> 
<input type="hidden" name="languages[0][level]" value="yy"> 

0を持っているが変更thatsの値です。

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) 

答えて

4

あなたparams[:language]は、そのエントリを超えるeach反復処理し、ハッシュされ、ブロックに各エントリのkeyvalueを渡しているので。反復処理する

params[:languages].each do |index, lang| 
    @job_offer.job_offer_languages.create name: lang[:name], level: lang[:level] 
    end 
end 

をまたはLANG値のリストを受信するactivesupportのを使用します:したがって、あなたは次のように必要あなたが望む方法langにアクセスし

params[:languages].values.each do |lang| 
    @job_offer.job_offer_languages.create name: lang[:name], level: lang[:level] 
    end 
end 
関連する問題