Зависимое уничтожение таблиц с более чем одной ссылкой - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть таблица атрибутов с двумя ссылками из таблицы пользователей.

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, тогда строка атрибута удаляется.Я хочу сделать зависимость :: уничтожить, чтобы работать для многих ссылок той же модели.Это возможно?

Моя миграция:

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 голосов
/ 26 ноября 2018

Редактировать:

Сначала вы выполните следующие изменения, когда рельсы используют Соглашение по конфигурации

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 таблице.

Так что есливам нужно уничтожить attribuitions, связанные с Foreign_key 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...