我有两个模型,故事和用户。每个故事属于某个用户。但是,调用User的.destroy方法不会破坏它拥有的Stories(当然,由于外键约束,这会引发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"
我尝试过不工作的事情:
可能相关但可能不相关的随机事实:故事还拥有一些章节对象。我正在使用PostgreSQL。我有composite_primary_keys gem。
答案 0 :(得分:3)
我相信你有点倒退了。 Story
取决于User
,因此dependent: :destroy
指令属于User
这样的内容:
class User < ApplicationRecord
self.primary_key = :name
has_many :stories, foreign_key: 'author', primary_key: 'name', dependent: :destroy
end