0
我有兩個模型,故事和用戶。每個故事都屬於某個用戶。但是,調用用戶的.destroy方法並不會破壞它擁有的故事(當然,這會因爲外鍵約束而引發SQL錯誤),而是而不是。下面是從模型的相關代碼(與不相干的東西省略,很明顯):父對象被破壞時,相關對象不會被銷燬
class Story < ApplicationRecord
belongs_to :user, foreign_key: 'author', primary_key: 'name'
end
class User < ApplicationRecord
self.primary_key = :name
has_many :stories, foreign_key: 'author', primary_key: 'name'
end
這裏是從schema.rb表定義(同樣,省略無關列):
create_table "stories", force: :cascade do |t|
t.string "author", null: false
t.index["author"], name: "index_stories_on_author", using: :btree
end
create_table "users", id: false, force: :cascade do |t|
t.string "name", null: false
t.index ["name"], name: "index_users_on_name", unique: true, using: :btree
end
add_foreign_key "stories", "users", column: "author", primary_key: "name"
事情我已經嘗試了做不工作:
- 刪除外鍵約束。 (這可以防止SQL錯誤,但不會從數據庫中刪除故事。)
- 將「dependent::destroy」添加到belongs_to語句中。
可能相關但可能不相關的隨機事實:Story也擁有一些章節對象。我正在使用PostgreSQL。我有composite_primary_keys寶石。
啊,謝謝! (這仍然導致SQL錯誤,但我可以通過刪除外鍵約束或使用:delete_all而不是:destroy來處理) – RFlaum
更新:我想通過使用on_delete :: cascade可以防止SQL錯誤 – RFlaum