2015-02-13 6 views
5

Meine Modelle:Accepts_nested_attributes_for wirft Active :: InvalidForeignKey: PG :: ForeignKeyViolation: ERROR

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 

Wenn ich versuche, Aufzeichnungen zu erstellen, wie so:

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

ich:

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". 

Also ich denke, ActiveRecord versucht, das verschachtelte Modell zu speichern, bevor das übergeordnete Modell gespeichert wird und damit die Fehler r. Aber warum macht es das? Wie kann ich das verhindern?

Antwort

1

Ich erlebte heute ein ähnliches Problem. In meinem Fall wird das Problem verursacht, weil ich 2 Tabellen in 1 (einzelne Tabellenvererbung) konsolidiert habe, indem ich eine neue Tabelle erstellt habe, aber vergessen habe, die zwei alten Tabellen zu löschen.

Ich hatte noch andere Tabellen mit Fremdschlüssel Einschränkungen für diese alten zwei Tabellen. Aktualisieren oder entfernen Sie diese Fremdschlüsseleinschränkungen und Sie sollten gut gehen.

Verwandte Themen