2011-11-11 10 views
5

storesのネストされたフォームcategoriesがあり、ストアモデルにattr_accessibleとしてリストされています。しかし、まだ、次のエラーを取得しておいてください。Rails 3.1 - 保護された属性を割り当てることはできません(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という結合テーブルがあります)。

何かアドバイスをいただければ幸いです(私はこれ以上2日間壁に頭を向けています)。私は(かなり冗長であり、レールがちょうど上記の問題に付着した場合は必要ありません)一時的な修正を実装しました

UPDATE。私は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

を私もモデルやまだ行くの両方にattr_accessibleを削除しようとしました! – Hopstream

答えて

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

+0

私もこの同じ問題を抱えていました。私が見つけることができる唯一の解決策は、ステファニーが提案したものです。例えば。 has_many:throughに切り替え、カテゴリアソシエーションではなく、結合アソシエーション(store_categories)のネストされた属性CRUDを管理します。 – cailinanne

関連する問題