我在Rails中的视频和广告系列之间存在HABTM关系,这意味着关联存储在联接表中。我想查找所有没有关联广告系列的视频。什么是最有效的方法呢?在Rails中,如何找到HABTM关系中的无关记录?
谢谢你看=)
我在Rails中的视频和广告系列之间存在HABTM关系,这意味着关联存储在联接表中。我想查找所有没有关联广告系列的视频。什么是最有效的方法呢?在Rails中,如何找到HABTM关系中的无关记录?
谢谢你看=)
Video.all(:include => :campaigns, :conditions => ["campaigns.id IS ?", nil])
的:include
会做左连接到相关的表,所以没有一个运动都应该有对运动的字段值NULL
值。
的SQL方式:
Videos.select_by_sql("SELECT * FROM videos WHERE id NOT IN (SELECT video_id FROM campaign_videos)")
Ruby之道:
Video.all.select {|v| v.campaigns.empty?}
我想如果你使用它独立的方法,这是更优雅。不过,我会建议为此写一个named scope。然后Geoffs版本是正确的:
named_scope :campaign_less, :include => :campaigns, :conditions => ["campaigns.id IS ?", nil]
此外,Geoffs解决方案可能更高效,因为它更低级。
虽然你为什么要在一个为你提供工具和手段的环境中编写纯sql, – 2010-07-14 07:07:29