对具有多个引用的表进行从属破坏

时间:2018-11-24 21:25:46

标签: ruby-on-rails ruby-on-rails-5

我有一个表归因,其中包含来自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

1 个答案:

答案 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 attribuitionsnot_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