2012-06-08 48 views
2

我想找到有些孩子的東西。因此,考慮:ActiveRecord - 找到父母

class Foo < ActiveRecord::Base 
    has_many :bars 
    has_many :bazes 

    scope :is_a_parent ...what goes here?... 

我想有任何的酒吧任何bazes FOOS。當然,所有的東西都可以用原始SQL,exists (select 1 from bars ...) or exists (select 1 from bazes ...),但是yuk。

當然有一些方法可以使用any?與arel or方法?一些其他的方式來做到這一點,而不訴諸於SQL?

回答

0

請問this有幫助嗎?以前的答案是尋找你的反面(Foos,沒有酒吧或bazes),但你應該能夠反轉邏輯。

+0

這不起作用。即使對於一個集合它也不會工作,因爲它會爲每個Foo返回多行。也許AR會對此進行整理,但要指望這一點存在風險和風險。無論如何,我非常肯定它對於我的兩個孩子集合的場景是平坦的。 –

0
class Foo < ActiveRecord::Base 
    has_many :bars 
    has_many :bazes  

    scope :is_a_parent, (joins(:bars) or joins(:bazes)).uniq 

會給你有一間酒吧或巴澤

順便說一下所有的Foo,通常函數開始「確保對方」,應以「?」結尾,並且應該只返回真/假。