Rails 3.1 - 无法批量分配受保护的属性(即使添加到attr_accessible)

时间:2011-11-11 10:59:08

标签: 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

我在商店模型中尝试了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

1 个答案:

答案 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