我如何使用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
我现在想弄清楚:哪些活动有特定的用户没有表达兴趣?这必须包括其他人感兴趣的活动以及完全没有兴趣的活动。 一个成功的(但无效的)方法是两个单独的查询:
(Activity.all - this_person.interests).first
我如何在ActiveRecord中整洁地表达这个查询?是否有一个抽象查询的(可靠的,保存完好的)插件?
已邀请:

datque

赞同来自:

我认为最简单的方法是通过:conditions参数使用SQL where子句片段。 例如:

Activity.all(:conditions => ['not exists (select 1 from personal_interests where person_id = ? and activity_id = activities.id)', this_person.id])
完全没有经过测试,可能并不完全正确,但你明白了。

要回复问题请先登录注册