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