rails has_many:带有别名关联的条件

时间:2011-12-23 18:08:22

标签: ruby-on-rails activerecord has-many-through

这种情况伴随my original question关于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_groupscontacts包含在一起时,我的问题就出现了:

Contact.includes(:anonymous_groups)
  

ActiveRecord :: StatementInvalid:PGError:ERROR:缺少表“contacts”的FROM子句条目

原因是生成的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 :(得分:0)

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