我有categories
的嵌套表单stores
,并在商店模型中将其列为attr_accessible。但仍然会收到以下错误:
WARNING: Can't mass-assign protected attributes: category_ids
我在商店模型中尝试了attr_accessible的所有变体:
attr_accessible :categories
attr_accessible :category
attr_accessible :category_id
attr_accessible :category_ids
它们都不起作用!这两个模型都是has_and_belongs_to_many(并且有一个名为categories_stores的连接表)。
任何建议都会非常感激(我已经在墙上撞了两天了)。
更新
我已经实施了临时修复(这非常多余,如果rails只是坚持上述问题则不需要)。我通过覆盖ActiveAdmin的create
方法并循环插入关联数据来修复它:
controller do
def update
@store = store.find(params[:id])
if @store.update_attributes(params[:store])
@store.categories.delete_all
params[:store][:category_ids].each do |category_id|
@store.categories << Category.find(category_id) unless category_id.blank?
end
redirect_to :action => :index
else
redirect_to :action => :edit, :notice => "Something f'ed up"
end
end
end
答案 0 :(得分:4)
我相信如果您有一个名为categories_stores的连接表,那么您的分配将更符合以下方面:
class Store
has_many :categories, :through => :categories_stores
在类别模型中使用类似的设置。
在您的表单中,如果您要创建商店,并且您想要为该商店创建/添加类别,那么您可能还需要添加:
accepts_nested_attributes_for :categories_stores
能够添加到该表。
您可以在此处详细了解嵌套属性:http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html