我在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