Hop*_*eam 5 ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1
我有一个嵌套的表单categories
,stores
并在商店模型中将其列为attr_accessible.但仍然会收到以下错误:
WARNING: Can't mass-assign protected attributes: category_ids
Run Code Online (Sandbox Code Playgroud)
我已经尝试了商店模型中attr_accessible的所有变体:
attr_accessible :categories
attr_accessible :category
attr_accessible :category_id
attr_accessible :category_ids
Run Code Online (Sandbox Code Playgroud)
他们都没有工作!这两个模型都是has_and_belongs_to_many(并且有一个名为categories_stores的连接表).
任何建议都会非常感激(我已经把头撞到墙上两天了).
UPDATE
我已经实现了一个临时修复(这非常冗余,如果rails只是坚持上述问题则不需要).我通过覆盖create
ActiveAdmin 的方法并循环插入关联数据来修复它:
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
Run Code Online (Sandbox Code Playgroud)
我相信,如果您有一个名为categories_stores的连接表,那么您的分配将更符合以下内容:
class Store
has_many :categories, :through => :categories_stores
Run Code Online (Sandbox Code Playgroud)
在类别模型中具有类似的设置。
在您的表单中,如果您正在创建一个商店,并且您想要为该商店创建/添加类别,那么您可能还需要添加:
accepts_nested_attributes_for :categories_stores
Run Code Online (Sandbox Code Playgroud)
能够添加到该表中。
您可以在此处阅读有关嵌套属性的更多信息:http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html
归档时间: |
|
查看次数: |
3668 次 |
最近记录: |