そのように定義された2つの単純な名前付きスコープがあります:
class Numbers < ActiveRecord::Base
named_scope :even, :conditions => {:title => ['2','4','6']}
named_scope :odd, :conditions => {:title => ['1','3','5']}
end
Numbers.even を呼び出すと、正しい 2,4,6 が返されます Numbers.odd を呼び出すと、正しい 1,3,5 が返されます
Numbers.even.odd のようにチェーンすると、1,3,5 が返されます。これが参照する最後のスコープだからです。Numbers.odd.even と言うと、実際には 2,4,6 になります。
それらをチェーンすると、1、2、3、4、5、6になると予想されます。私が試したもう1つのアプローチは次のとおりです。
named_scope :even, :conditions => ["title IN (?)", ['2', '4','6']]
named_scope :odd, :conditions => ["title IN (?)", ['1', '3','5']]
しかし、作成するクエリは次のようになるため、それらを連鎖させても結果は得られません。
SELECT * FROM `numbers`
WHERE ((title IN ('1','3','5')) AND (title IN ('2','4',6')))
「AND」句を OR に変更する必要がありますが、それを強制する方法がわかりません。これは ActiveRecord の問題でしょうか??