2011-12-23 76 views
0

这种伴随着my original questionhas_many :through有条件,但我发现了另一个问题。rails has_many:通过别名协会的条件

鉴于这种类:

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_groupscontacts

Contact.includes(:anonymous_groups) 

ActiveRecord::StatementInvalid: PGError: ERROR: missing FROM-clause entry for table "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

现在,我们可以减轻这种查询错误(我敢肯定是一个bug),但做这样的事情:

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

这使条件对正确的表中的SQL,但是当我尝试建立一个匿名组,我得到这个:

contact.anonymous_groups.build 

ActiveRecord::UnknownAttributeError: unknown attribute: groups.anonymous

所以它的工作原理进行查询但不能用于建筑。我很确定这是一个错误,但我想知道是否有其他人遇到过这种情况或有解决方法。

回答

0

我觉得像:conditions => "groups.anonymous = true"应该可以正常工作。

+0

这很奇怪,我试过:':conditions => {'groups.anonymous'=> true}',并且因为同样的原因失败了。但是用直线起作用。离奇。谢谢一堆 – brad 2011-12-23 18:37:35