Я некоторое время боролся с этим и решил выкинуть это туда:
У меня есть 3 модели, Пользователь, Соединение, Подозреваемый
У пользователя много подключений,
Соединение имеет одного Подозреваемого, связанного через case_id
У пользователя много подозреваемых через свои соединения.
Код выглядит следующим образом:
class User < ActiveRecord::Base
has_many :followers
has_many :suspects, :through => :followers
end
class Connection < ActiveRecord::Base
belongs_to :user
belongs_to :suspect, :primary_key => :case_id , :foreign_key => :case_id
end
class Suspect < ActiveRecord::Base
belongs_to :connection, :primary_key => :case_id , :foreign_key => :case_id
end
Проблема в том, что own_to, похоже, игнорирует первичный ключ:
Если я сделаю
u = User.find(:first)
u.suspects
Сгенерированный SQL:
SELECT `suspects`.* FROM `suspects` INNER JOIN `connections` ON `suspects`.id = `connections`.case_id WHERE ((`followers`.user_id = 1))
Однако должно быть:
SELECT `suspects`.* FROM `suspects` INNER JOIN `connections` ON `suspects`.case_id = `connections`.case_id WHERE ((`followers`.user_id = 1))
Может ли кто-нибудь указать мне правильное направление?
Джеймс