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