2011-12-23 74 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