2015-02-13 14 views
5

I miei modelli:accepts_nested_attributes_for solleva ActiveRecord :: InvalidForeignKey: PG :: ForeignKeyViolation: ERRORE

class Foo < ActiveRecord::Base 
    has_many :bars, inverse_of: :foo 
    accepts_nested_attributes_for :bars 

    ... 
end 

class Bar < ActiveRecord::Base 
    belongs_to :foo, inverse_of: :bars 

    ... 
end 

Quando cerco di creare record in questo modo:

Foo.create(foo_attribute: value, bars_attirbutes: [{bar_attribute: value}]) 

ottengo:

ActiveRecord::InvalidForeignKey: PG::ForeignKeyViolation: ERROR: insert or update on table "bars" violates foreign key constraint "bars_foo_id_fkey" 
DETAIL: Key (foo_id)=(14) is not present in table "foos". 

Quindi suppongo che ActiveRecord stia cercando di salvare il modello annidato prima che il modello padre venga salvato e quindi l'erro r. Ma perché sta facendo questo? Come posso impedirgli di farlo?

risposta

1

Ho riscontrato un problema simile oggi. Nel mio caso, il problema è causato dal fatto che ho consolidato 2 tabelle in 1 (ereditarietà di una tabella singola) creando una nuova tabella, ma ho dimenticato di eliminare le due vecchie tabelle.

Ho ancora altre tabelle con vincoli di chiave esterna su queste due vecchie tabelle. Aggiorna o rimuovi i vincoli di chiave esterna e dovresti essere a posto.

Problemi correlati