2009-08-12 56 views
9

有沒有一種方法可以將添加劑範圍組合起來?與named_scope的添加劑鏈接

如果我有範圍

User.big_haired 

User.plays_guitar 

我可以叫

User.big_haired.plays_guitar 

,並得到所有誰擁有大發彈着吉他的用戶。我可以寫這個來讓所有有大發或彈吉他的用戶?

我想我必須補充一點,我意識到你可以運行一組查詢並將結果添加到一起。這就是我想要做的。

回答

2

所以,你必須:

class User < ActiveRecord::Base 
    named_scope :big_haired, :conditions => {:hair => 'massive'} 
    named_scope :plays_guitar, :conditions => {:plays => 'guitar'} 
end 

User.big_haired.plays_guitar =>很多用戶發現。

我不知道一種方法將兩者混合在一起。也許只是混合陣列:

@users = (User.big_haired + User.plays_guitar).uniq 
0

我剛剛在我的一些模型上對named_scopes進行了定義。如果將它結合起來,它將把條件放在一起作爲AND條件。所以......

User.big_haired.plays_guitar 

將導致(顯然,我的速記SQL,並不是真正的軌道產生的東西)

SELECT * FROM users WHERE hair = 'massive' AND plays = 'guitar' 

我不知道的方式將它們組合爲OR關係。當你考慮各種選擇時,混合起來會非常複雜。我們始終鏈接named_scopes,它運行良好(只要您希望將它們ANDed在一起)。

要做到和情況下,我想無論是創建建立在OR條件特殊的命名範圍,或使用聯合制作了一套獨特的,像這樣:最近

User.big_haired | User.plays_guitar