2009-07-22 39 views
1

我有一個通過連接模型建立的多對多關係。基本上,我允許人們在活動中表達興趣。如何使用ActiveRecord查找無關記錄?

class Activity < ActiveRecord::Base 
    has_many :personal_interests 
    has_many :people, :through => :personal_interests 
end 

class Person < ActiveRecord::Base 
    has_many :personal_interests 
    has_many :activities, :through => :personal_interests 
end 

class PersonalInterest < ActiveRecord::Base 
    belongs_to :person 
    belongs_to :activity 
end 

我現在想了解一下:在活動具有特定用戶表示有興趣?這必須包括其他人感興趣的活動以及完全沒有興趣的活動。

成功(但inefficent)方法是兩個單獨的查詢:

(Activity.all - this_person.interests).first 

我怎麼能整齊地表達的ActiveRecord此查詢?是否有一個抽象查詢的(可靠的,保存完好的)插件?

+0

如果有人對關聯擴展插件或繼任者有任何想法,我會特別感興趣。 (rubyforge.org/projects/assocext) – 2009-07-28 16:27:40

回答

1

我認爲最簡單的方法就是通過參數:conditions使用SQL where子句片段。

例如:

Activity.all(:conditions => ['not exists (select 1 from personal_interests where person_id = ? and activity_id = activities.id)', this_person.id]) 

完全未經測試,並且可能無法正常工作完全正確,但你的想法。

+0

真棒,這絕對適合我的眼睛!不過,我很驚訝你必須使用SQL。 http://rubyforge.org/projects/assocext/據說這是作爲AR擴展,但它顯然在三年內未被觸及。 – 2009-07-22 21:31:59