您好我正在使用嵌套表单插件并尝试使其适用于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
感谢您的帮助!
答案 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创建一个新实体而不是更新现有实体。