Rails:如何以嵌套形式检索 child objects 的参数
Rails: how to retrieve the params for child objects in nested form
我有一个向导情况,我创建了一个 Parent object,然后构建了一个包含 2 个嵌套 children.
的表单
提交的参数如下所示:
Parameters: {"room"=>
{"parents_attributes"=>
{"0"=>{"name"=>"r2", "phone"=>"07443107986"},
"1"=>{"name"=>"", "phone"=>""}}},
"commit"=>"Go!", "id"=>"step03"}
(提交和 ID 来自邪恶的向导步骤)
如果用户刷新页面,这些 children 的 ID 会发生变化,参数如下所示:
Parameters: {"room"=>
{"parents_attributes"=>
{"1"=>{"name"=>"r2", "phone"=>"07443107986"},
"2"=>{"name"=>"", "phone"=>""}}},
"commit"=>"Go!", "id"=>"step03"}
由于 ID 是由 fields_for 生成的。
我的控制器代码像这样检索数据(房间保存在上一步的会话中):
@room = Room.find(session[:room_id])
@room.parents.build(room_params[:parents_attributes]['0'])
@room.parents.build(room_params[:parents_attributes]['1'])
这显然只有在用户不刷新页面时才有效。此外,如果验证触发 children 的 ID 也会更改。
从参数哈希中检索这些 parent_attributes 的更好方法是什么?
编辑
在向导步骤中,child object 是这样构建的:
when :step03
@room = Room.find(session[:room_id])
2.times{ @room.parents.build }
您可以尝试按照以下方式动态提取哈希键:
room_params[:parents_attributes].each {|k,_| @room.parents.build(room_params[:parents_attributes][k])}
我有一个向导情况,我创建了一个 Parent object,然后构建了一个包含 2 个嵌套 children.
的表单提交的参数如下所示:
Parameters: {"room"=>
{"parents_attributes"=>
{"0"=>{"name"=>"r2", "phone"=>"07443107986"},
"1"=>{"name"=>"", "phone"=>""}}},
"commit"=>"Go!", "id"=>"step03"}
(提交和 ID 来自邪恶的向导步骤)
如果用户刷新页面,这些 children 的 ID 会发生变化,参数如下所示:
Parameters: {"room"=>
{"parents_attributes"=>
{"1"=>{"name"=>"r2", "phone"=>"07443107986"},
"2"=>{"name"=>"", "phone"=>""}}},
"commit"=>"Go!", "id"=>"step03"}
由于 ID 是由 fields_for 生成的。
我的控制器代码像这样检索数据(房间保存在上一步的会话中):
@room = Room.find(session[:room_id])
@room.parents.build(room_params[:parents_attributes]['0'])
@room.parents.build(room_params[:parents_attributes]['1'])
这显然只有在用户不刷新页面时才有效。此外,如果验证触发 children 的 ID 也会更改。
从参数哈希中检索这些 parent_attributes 的更好方法是什么?
编辑
在向导步骤中,child object 是这样构建的:
when :step03
@room = Room.find(session[:room_id])
2.times{ @room.parents.build }
您可以尝试按照以下方式动态提取哈希键:
room_params[:parents_attributes].each {|k,_| @room.parents.build(room_params[:parents_attributes][k])}