Rails允许嵌套的哈希参数

时间:2015-07-15 23:52:00

标签: ruby-on-rails ruby-on-rails-4 parameters parameter-passing strong-parameters

以下是我的参数:

{"utf8"=>"✓", "authenticity_token"=>"g0mNoBytyd0m4oBGjeG3274gkE5kyE3aPbsgtqz3Nk4=", "commit"=>"Save changes", "plan_date"=>{"24"=>{"recipe_id"=>"12"}, "25"=>{"recipe_id"=>"3"}, "26"=>{"recipe_id"=>"9"}}}

我如何允许:

"plan_date"=>{"24"=>{"recipe_id"=>"12"}, "25"=>{"recipe_id"=>"3"}, "26"=>{"recipe_id"=>"9"}}

获得如下输出:

permitted_params = ["24"=>{"recipe_id"=>"12"}, "25"=>{"recipe_id"=>"3"}, "26"=>{"recipe_id"=>"9"}]

这样我就可以使用以下内容保存:

permitted_params.each do |id, attributes|
  Object.find_by_id(id.to_i)
  Object.update_attributes(attributes)
end

我正在尝试以下方法,但它无效:

def permitted_params
  params.require(:plan_date).permit(:id => [:recipe_id])
end

我的版本实际上并没有让任何事情发生=(

1 个答案:

答案 0 :(得分:0)

  

具有整数键的哈希值的处理方式不同,您可以声明   这些属性好像是直接的孩子

     

RailsGuides - Action Controller Overview

def permitted_params
  params.require(:plan_date).permit([:recipe_id])
end

虽然" Rails Way"是使用fields_for

<%= form_for :plan_date do |f| %>
  <%= f.fields_for :recipes do |ff| %>
    <%= ff.text_field :foo %>
  <% end %>
<% end %>

这为您提供了嵌套属性哈希:

plan_date: {
  recipes_attributes: [
    "0" => { foo: 'bar' } 
  ]
}

可以与accepts_nested_attributes_for一起使用来创建和更新嵌套模型。

def update
  @plan_date.update(permitted_params)
end

def permitted_params
  params.permit(:plan_date).permit(recipies_attributes: [:foo])
end