2016-04-08 11 views
2

親オブジェクトを作成し、2つのネストされた子を持つフォームを作成するウィザードの状況があります。Rails:ネストされたフォームの子オブジェクトのパラメータを取得する方法

このような提出外観を得るパラメータ:

Parameters: {"room"=> 
{"parents_attributes"=> 
{"0"=>{"name"=>"r2", "phone"=>"07443107986"}, 
"1"=>{"name"=>"", "phone"=>""}}}, 
"commit"=>"Go!", "id"=>"step03"} 

(コミットとidは邪悪なウィザードステップからのもの)

ユーザーがページを更新する場合は、これらの子供たちのためのIDのは、変更とidのはfields_forによって生成されるため

Parameters: {"room"=> 
{"parents_attributes"=> 
{"1"=>{"name"=>"r2", "phone"=>"07443107986"}, 
"2"=>{"name"=>"", "phone"=>""}}}, 
"commit"=>"Go!", "id"=>"step03"} 

:パラメータは次のようになります。

私のコントローラのコードは、(部屋は前のステップでのセッションで保存されている)、このようなデータを取得します。

@room = Room.find(session[:room_id]) 
    @room.parents.build(room_params[:parents_attributes]['0']) 
    @room.parents.build(room_params[:parents_attributes]['1']) 

このユーザーはページを更新しない場合は、明らかにのみ機能します。また、バリデーションが子どものIDを変更した場合でも変更されます。

paramsハッシュからこれらのparent_attributesを取得するより良い方法はありますか?

EDIT

ウィザードのステップでは、子オブジェクトがこのように構築されています:

when :step03 
    @room = Room.find(session[:room_id]) 
    2.times{ @room.parents.build } 
+0

'room_params [ :parents_attributes] .each {| k、_ | @ room.parents.build(room_params [:parents_attributes] [k])} ' - あなたはハッシュキーを動的に抽出するこのようなことをすることができますか? – dp7

+0

親モデルで 'nested_attributes'を使用している場合は、これを行う必要はありません。あなたはそのアプローチを試みましたか? –

+0

@Anthony Eはい、ネストされた属性を使用しています – rmcsharry

答えて

1

あなたは動的にハッシュキーを抽出するために、次の試みることができます。

room_params[:parents_attributes].each {|k,_| @room.parents.build(room_params[:parents_attributes][k])} 
関連する問題