我有一个旨在更新关联中对象集合的表单:
<%= form_tag(url: update_parent_children_path(parent_id: @parent.id), method: :put) do %>
<% @children.each do |child| %>
<%= fields_for "children[]", child do |cf| %>
.... Fields for form
在参数中,这会出现:
params[:children] -->
{"1" =>{"foo"=>"x", "bar"=>"y", "baz"=>"z"},
"2" =>{"foo"=>"x", "bar"=>"y", "baz"=>"z"},
"3" =>{"foo"=>"x", "bar"=>"y", "baz"=>"z"}}
我知道要将对象的一个实例列入白名单,我会使用:
params.require(:child).permit(:foo, :bar, :baz)
是否有类似的方法允许完整的儿童参数列表?
供参考,我将使用的代码更新块:
def update_children_on_parent
@children.each do |child|
child_params = update_params.select{|key, value| key == child.id}
child.update(child_params)
end
end
其中update_params是列入白名单的子参数列表
答案 0 :(得分:0)
在更新功能中,允许单独使用params而不是预定义的白名单。
鉴于
params[:children] -->
{
"1" =>{"foo"=>"x", "bar"=>"y", "baz"=>"z"},
"2" =>{"foo"=>"x", "bar"=>"y", "baz"=>"z"},
"3" =>{"foo"=>"x", "bar"=>"y", "baz"=>"z"}
},
更新功能的工作原理如下:
@children.each do |child|
child_params = params[:children].select{|key, value| key == child.id.to_s}["#{child.id}"]
child.update(child_params.permit(:foo, :bar, :baz))
...