在Rails中如何找到HABTM关系中的分离记录?

时间:2010-07-14 04:24:34

标签: ruby-on-rails has-and-belongs-to-many jointable

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

感谢您寻找=)

3 个答案:

答案 0 :(得分:3)

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

:include会对关联表格进行左联接,因此没有广告系列的任何内容都应该包含广告系列字段值的NULL值。

答案 1 :(得分:1)

Ruby方式:

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

如果您在方法中单独使用它,我认为这更优雅。但是,我建议为此写一个named scope。然后,Geoffs版本是正确的版本:

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

此外,Geoffs解决方案可能更高效,因为它更低级。

答案 2 :(得分:0)

SQL方式:

Videos.select_by_sql("SELECT * FROM videos WHERE id NOT IN (SELECT video_id FROM campaign_videos)")