1

我在 Rails 中的视频和活动之间有 HABTM 关系,这意味着该关联存储在连接表中。我想找到所有没有相关活动的视频。这样做最有效的方法是什么?

谢谢你看=)

4

3 回答 3

3
Video.all(:include => :campaigns, :conditions => ["campaigns.id IS ?", nil])

将对:include关联表进行左连接,因此没有活动的任何内容都应该具有NULL活动字段值的值。

于 2010-07-14T04:29:38.213 回答
1

红宝石方式:

Video.all.select {|v| v.campaigns.empty?}

我认为如果您在方法中独立使用它会更优雅。但是,我建议为此编写一个命名范围。再说一次,Geoffs 版本是正确的:

named_scope :campaign_less, :include => :campaigns, :conditions => ["campaigns.id IS ?", nil]

此外,Geoffs 解决方案可能更有效,因为它更底层。

于 2010-07-14T08:05:37.157 回答
0

SQL方式:

Videos.select_by_sql("SELECT * FROM videos WHERE id NOT IN (SELECT video_id FROM campaign_videos)")
于 2010-07-14T04:30:24.983 回答