rails has_many: условия с псевдонимом - PullRequest
0 голосов
/ 23 декабря 2011

Этот тип согласуется с моим первоначальным вопросом о has_many :through с условиями, но я обнаружил еще одну проблему.

Учитывая этот класс:

class Contact < AR
  has_many :group_contacts
  has_many :groups, :through => :group_contacts, :conditions => {:published => true}
  has_many :anonymous_groups, :through => :group_contacts, :source => :group, :conditions => {:anonymous => true}
end

Моя проблема возникает, когда я пытаюсь включить anonymous_groups с contacts:

Contact.includes(:anonymous_groups)

ActiveRecord :: StatementInvalid: PGError: ERROR: отсутствует запись в предложении FROM для таблицы "contacts"

Причина в том, что сгенерированный sql неверен.Это что-то вроде:

SELECT "group_contacts"."id" AS t0_r0 ... "groups"."anonymous" AS t1_r5 ... LEFT OUTER JOIN "groups" ON "groups"."id" = "group_contacts"."group_id" WHERE ("group_contacts".contact_id IN (...) AND ("contacts"."anonymous" = 'true'))

Перефразируя конечно, но посмотрите на конечное условие.Это ставит анонимное условие на contacts вместо groups

Теперь мы можем устранить эту ошибку запроса (которая, я уверен, является ошибкой), но сделав что-то вроде:

has_many :anonymous_groups, :through => :group_challenges, :source => :group, :conditions => { :groups => {:anonymous => :true} }

Это ставит условие для правильной таблицы в sql, но когда я пытаюсь создать анонимную группу, я получаю это:

contact.anonymous_groups.build

ActiveRecord :: UnknownAttributeError: неизвестный атрибут: groups.anonymous

Так что это работает для запросов, но не для построения.Я совершенно уверен, что это ошибка, но мне интересно, сталкивался ли кто-то еще с этим или имеет обходной путь.

1 Ответ

0 голосов
/ 23 декабря 2011

Я думаю, что-то вроде :conditions => "groups.anonymous = true" должно работать нормально.

...