has_one/has_many с зависимым уничтожением, но с другим именем для ключа

Поэтому я смотрю на чей-то код, который имеет следующее (перефразированное):

class user
  has_one :connection, :dependent => :destroy
  has_one :second_user, :through => :connection, :class_name => 'User'
end

class connection
  belongs_to :user
  belongs_to :second_user, :class => 'User'
end

Если у меня есть объект подключения и я удалю связанного пользователя, он может быть уничтожен. Но я также хочу сделать так, чтобы, если пользователь, занимающий поле 'second_user', был уничтожен, соединение было уничтожено. Как я могу сделать это довольно легко, без лишних хлопот (надеюсь, миграция не нужна)?

Спасибо!

1 ответ

Решение

Обратите внимание, что один пользователь может быть связан с двумя подключениями. Это означает, что существует еще одна связь, которая существует между пользователем (как вторым пользователем) и соединением, которое еще не определено. Я позвоню secondary_connection,

class User
  has_one :connection, :dependent => :destroy
  has_one :secondary_connection, :class_name => 'Connection', :foreign_key => :second_user_id, :dependent => :destroy  # Inverse of Connection second_user
  has_one :second_user, :through => :connection, :class_name => 'User'
end
Другие вопросы по тегам