Этот тип согласуется с моим первоначальным вопросом о 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
Так что это работает для запросов, но не для построения.Я совершенно уверен, что это ошибка, но мне интересно, сталкивался ли кто-то еще с этим или имеет обходной путь.