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