9

スコープを加算的に結合する方法はありますか?

スコープがあれば

User.big_haired

User.plays_guitar

電話できる

User.big_haired.plays_guitar

そして、髪の毛が大きくてギターを弾くすべてのユーザーを獲得します。これを書いて、髪の毛が太い、またはギターを弾くすべてのユーザーを取得できますか?

一連のクエリを実行し、結果を一緒に追加できることを認識していることを付け加える必要があると思います。それが私がやらないようにしていることです。

4

3 に答える 3

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
于 2009-08-12T03:10:21.247 に答える
0

named_scopes が定義されているいくつかのモデルでこれを試してみました。条件を組み合わせるとAND条件になります。そう...

User.big_haired.plays_guitar

結果は(明らかに私の簡略化されたSQLであり、実際のレールが生成したものではありません)

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

それらを OR 関係として結合する方法がわかりません。さまざまなオプションについて考えると、これを混在させるのは非常に複雑です。named_scopes は常に連鎖していますが、うまく機能します (それらを AND で結合したい限り)。

and ケースを実行するには、OR 条件が組み込まれた特別な名前付きスコープを作成するか、ユニオンを使用して次のような一意のセットを生成します。

User.big_haired | User.plays_guitar
于 2009-08-12T18:38:20.747 に答える