我有一个表归因,其中包含来自User表的2个引用。
class Attribuition < ApplicationRecord
belongs_to :user, class_name: 'User', foreign_key: 'user_id'
belongs_to :not_rated, class_name: 'User', foreign_key: 'not_rated_id'
end
用户模型:
class User < ApplicationRecord
has_many :attribuitions, dependent: :destroy
end
当我销毁标记为not_rated的用户时,我希望它被销毁,但这只是在销毁标记为user_id的用户时发生,然后属性行被删除。我想使depend ::销毁为同一模型的许多引用工作。有可能吗?
我的迁移是:
class CreateAttribuitions < ActiveRecord::Migration[5.2]
def change
create_table :attribuitions do |t|
t.references :user
t.references :not_rated, index: { unique: true }
t.timestamps
end
end
end
答案 0 :(得分:1)
编辑:
首先,您要进行以下更改,因为Rails使用约定而不是配置
class Attribuition < ApplicationRecord
- belongs_to :user, class_name: 'User', foreign_key: 'user_id'
+ belongs_to :user
end
需要更改
当您在has_many :attribuitions, dependent: :destroy
模型旁边提及User
时,class_name
将是Attribuition
,而Foreign_key将是user_id
,存储在attributions
表中。
因此,如果您需要销毁与Foreign_key attribuitions
和not_rated_id
相关的user_id
,则需要进行以下更改。
class User < ApplicationRecord
has_many :attribuitions, dependent: :destroy # default foreign_key is user_id
has_many :not_rated_attribuitions, foreign_key: 'not_rated_id', dependent: :destroy
end