簡體   English   中英

將嵌套形式的多個對象的參數列入白名單

[英]Whitelisting parameters for multiple objects from nested form

我有一個旨在更新關聯中的對象集合的表單:

<%= 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是列入白名單的子級參數列表

在更新功能中,允許的參數分別而不是作為預定義的白名單。

給定

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))
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM