ActiveRecordモデルで次のスコープを検討してください。
scope :onsale, where(:sales_state => "onsale")
scope :outdated, where(:sales_state => "outdated")
scope :onsale_or_outdated, where(" sales_state = 'onsale' OR sales_state = 'outdated' ")
Railsがでオーバーライド:onsale
することを知っているのに:outdated
、ではない:onsale
のは:onsale_or_outdated
なぜですか?
私のユースケース:
多くのスコープを持つリレーションオブジェクトがあり(保存された検索だとしましょう)、そのうちの1つはです:onsale
。それから別の関係を作りたいのですが、今回はまたはのsales_state
どちらかonsale
になりたいですoutdated
。
を使用するrelation.onsale_or_outdated
と、sales_state
はオーバーライドされず、新しい条件が追加されるだけです。
[...] WHERE "cars"."sales_state" = 'onsale' [...] AND (("cars"."sales_state" = 'onsale' OR "cars"."sales_state" = 'outdated'))
このコンテキストで'または'-ed条件を使用するにはどうすればよいですか?