2016-04-08 6 views
2

У меня есть ситуация с мастером, в которой я создаю объект-родитель, а затем создаю форму с двумя вложенными дочерними элементами.Rails: как получить параметры для дочерних объектов во вложенной форме

Параметров, которые получают представленные выглядеть следующим образом:

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

(фиксация и идентификатор являются от Злого шага мастера)

Если пользователь обновляет страницу, идентификатор для этих детей меняются и параметры выглядят так:

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

Поскольку идентификаторы генерируются полями_for.

Мой контроллер код извлекает данные, как это (в помещении сохраняется в сессии на предыдущем шаге):

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

Это, очевидно, работает только если пользователь не обновляет страницу. Кроме того, если проверки активируют идентификацию детей, это тоже изменится.

Что является лучшим способом получить эти parent_attributes из хэша params?

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])} 
Смежные вопросы