2009-08-12 12 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 =>たくさん。

私は、2つを一緒にマッシュする方法を知らない。おそらく、単なる配列をブレンド:

@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を常にチェーンしています。そしてケースを行うに

、私は上に構築されたOR条件と特別な名前のスコープを作成し、またはそうのようなユニークなセットを生成するために労働組合を使用し、次のいずれか

User.big_haired | User.plays_guitar 
関連する問題