принадлежит_ не используя первичный ключ - PullRequest
7 голосов
/ 01 августа 2009

Я некоторое время боролся с этим и решил выкинуть это туда:

У меня есть 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))

Может ли кто-нибудь указать мне правильное направление?

Джеймс

Ответы [ 2 ]

5 голосов
/ 02 августа 2009

Документы для принадлежностей говорят, что вы можете использовать опцию: primary_key, но мы так и не смогли заставить ее работать. Тем не менее, последняя версия rails, 2.3.3, специально имеет исправление для этого

1 голос
/ 04 августа 2009

После дополнительного тестирования @pallan верен, это было исправлено в 2.3.3, но только для первого уровня ассоциации, а не для has_many: through.

Например:

Connection.suspects

Использует правильный SQL, но

User.connections.suspects

Нет.

Я собираюсь открыть билет на это сейчас.

JP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...