Rails 4嵌套表单问题

时间:2013-07-10 00:50:54

标签: ruby-on-rails

您好我正在使用嵌套表单插件并尝试使其适用于rails 4而不是rails 3.基本上我的模型看起来像这样:

has_many :item, :dependent => :destroy

accepts_nested_attributes_for :item, :reject_if => lambda { |a| a[:item].blank? }, :allow_destroy => true

我的观点如下:

<%= nested_form_for(@store) do |f| %>
  <%= f.fields_for :item do |item_form| %>
     <%= item_form.text_field :name %>
     <%= item_form.link_to_remove "Remove this item" %>
  <% end %>
<% end %>

这是有效的(就演示而言 - 你可以像你应该的那样添加和删除字段)但不保存项目名称。

我在我的控制器中试过这个(这些是受保护的属性/参数):

def store_params
  params.require(:store).permit(:name, :owner, :description,:url, :user, item_attributes)
end

但仍然提出:

Unpermitted parameters: item_attributes

感谢您的帮助!

2 个答案:

答案 0 :(得分:5)

您将不得不允许项目(如名称)的字段也被允许。

所以试试这个:

def store_params
    params.require(:store).permit(:name, :owner, :description,:url, :user, item_attributes: [:name])
end

答案 1 :(得分:5)

有时你必须像这样指定:id:

def store_params
    params.require(:store).permit(:name, :owner, :description,:url, :user, item_attributes: [:id, :name])
end

在我上周的类似情况中,未指定:id使得Rails 4创建一个新实体而不是更新现有实体。