2011-11-11 1 views
5

Ho un modulo nidificato categories per stores e l'ho elencato come attr_accessible nel modello di negozio. Ma ancora continuo a ricevere il seguente errore:Rails 3.1 - Impossibile assegnare in massa attributi protetti (anche se aggiunti a attr_accessible)

WARNING: Can't mass-assign protected attributes: category_ids 

ho provato tutte le varianti del attr_accessible nel modello di negozio:

attr_accessible :categories 
attr_accessible :category 
attr_accessible :category_id 
attr_accessible :category_ids 

Nessuno di loro lavoro! Entrambi questi modelli sono has_and_belongs_to_many (e hanno una tabella di join denominata categories_stores).

Qualsiasi consiglio sarebbe molto apprezzato (ho battuto la testa contro il muro per due giorni su questo).

UPDATE

Ho implementato una soluzione temporanea (che è abbastanza superfluo e non necessario se le rotaie appena aderito al problema di cui sopra). Ho riparato sovrascrivendo il metodo create per ActiveAdmin e loop di inserire i dati dell'associazione:

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

Ho anche provato a rimuovere attr_accessible per entrambi i modelli e ancora non va! – Hopstream

risposta

4

Credo che se si dispone di una tabella chiamata giunzione categories_stores, che le assegnazioni saranno più lungo le linee di:

class Store 

    has_many :categories, :through => :categories_stores 

con una configurazione simile nel modello Categorie.

Nel modulo, se si sta creando un negozio, per esempio, e si desidera creare/aggiungere categorie per quel negozio, allora si può anche bisogno di aggiungere:

accepts_nested_attributes_for :categories_stores 

per essere in grado di aggiungere quel tavolo.

Si può leggere di più su attributi nidificati qui: http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

+0

Ho avuto anche questo stesso problema e l'unica soluzione che ho trovato è quello che Stephanie ha suggerito. Per esempio. passare a has_many: through e gestire l'attributo nidificato CRUD per l'associazione join, (store_categories) piuttosto che l'associazione categorie. – cailinanne