Ruby on rails Rails 3.1——Can';t mass assign protected attributes(即使添加到attr_accessible中)

Ruby on rails Rails 3.1——Can';t mass assign protected attributes(即使添加到attr_accessible中),ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.1,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.1,我为商店创建了一个嵌套表单类别,并将其列为商店模型中可访问的属性。但仍然会出现以下错误: WARNING: Can't mass-assign protected attributes: category_ids 我已经尝试了商店模式中可访问的所有attr_变体: attr_accessible :categories attr_accessible :category attr_accessible :category_id attr_accessible :category_ids 他们

我为
商店
创建了一个嵌套表单
类别
,并将其列为商店模型中可访问的属性。但仍然会出现以下错误:

WARNING: Can't mass-assign protected attributes: category_ids
我已经尝试了商店模式中可访问的所有attr_变体:

attr_accessible :categories
attr_accessible :category
attr_accessible :category_id
attr_accessible :category_ids
他们都不工作!这两个模型都是has_和属于许多(并且有一个称为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
controller-do
def更新
@store=store.find(参数[:id])
如果@store.update_属性(参数[:store])
@store.categories.delete_all
参数[:store][:category_id]。每个do | category_id|
@store.categories:索引
其他的
重定向到:action=>:edit,:notice=>“发生了什么事”
结束
结束
结束

我相信,如果您有一个名为categories\u stores的联接表,您的作业将更符合以下内容:

class Store

    has_many :categories, :through => :categories_stores
在类别模型中使用类似的设置

在您的表单中,如果您正在创建一个商店,例如,并且您想要为该商店创建/添加类别,那么您可能还需要添加:

    accepts_nested_attributes_for :categories_stores
以便能够添加到该表中


您可以在此处阅读有关嵌套属性的更多信息:

我甚至尝试删除两种模型都可以访问的属性,但仍然没有成功!我也遇到过同样的问题,我能找到的唯一解决办法就是斯蒂芬妮的建议。例如,切换到has_many:通过并管理联接关联的嵌套属性CRUD(存储类别),而不是类别关联。