3

嗨,我正在使用嵌套表单插件并尝试使其适用于 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

感谢大家的帮助!

4

2 回答 2

5

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

所以试试这个:

def store_params
    params.require(:store).permit(:name, :owner, :description,:url, :user, item_attributes: [:name])
end
于 2013-07-10T00:55:21.123 回答
5

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

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

在我上周遇到的类似情况下,没有指定 :id 使 Rails 4 创建了一个新实体,而不是更新现有实体。

于 2013-07-10T02:54:19.767 回答