Ich habe gerade festgestellt, dass ich einige Probleme beim Löschen von übergeordneten Modellen haben.Schienen Fremdschlüssel-Setup mit AR und Postgres
Ich habe dieses Setup:
user.rb
has_many :conversations, foreign_key: "sender_id", dependent: :destroy
conversation.rb
belongs_to :sender, class_name: "User", foreign_key: "sender_id"
belongs_to :recipient, class_name: "User", foreign_key: "recipient_id"
Schema (Postgres DB)
add_foreign_key "conversations", "users", column: "recipient_id"
add_foreign_key "conversations", "users", column: "sender_id"
Wie Sie sich vorstellen können, wenn user.destroy
i s genannt, und es ist ein Gespräch, in dem der Benutzer der Empfänger ist, dann wird es PG::ForeignKeyViolation ERROR: update or delete on table conversations violates foreign key constraint...
Um dieses Problem zu lösen erhöht Ich plane folgendes zu tun:
user.rb
#this will solve the rails side of the problem
has_many :received_conversations, class_name: "Conversation", foreign_key: "recipient_id", dependent: :destroy
Schema (DB):
#this will solve the DB side of the problem
add_foreign_key "conversations", "users", column: "recipient_id", on_delete: :cascade
add_foreign_key "conversations", "users", column: "sender_id", on_delete: :cascade
Ist dies der richtige Weg, um dieses Problem zu lösen?
Überprüfen Sie diesen Beitrag zu referenziellen Integritäts- und Fremdschlüsseleinschränkungen für Rails. Es sieht so aus, als wärst du genau richtig. https://robots.thoughtbot.com/referential-integrity-with-foreign-keys – bkunzi01
Danke bkunzi01! Ich habe noch eine Frage nach dem Lesen des Artikels. Würden Sie auch auf der Rails Seite "abhängig:: zerstören"? Der Artikel sagt, dass es gelöscht werden könnte, aber ich würde es lieber behalten. –