Rails 3.2.8を使用して単純なスコープを作成しています。ここでは、データベースのカテゴリ列でフィルタリングします。次に例を示します。
scope :category_1, where(:category => 'category_1')
scope :category_2, where(:category => 'category_2')
次に、両方のスコープを使用してデータベースからオブジェクトを取得しようとすると、次のようになります。
Model.category_1.category_2.all
次のような where 句を生成する代わりにアクティブ レコード:
WHERE category = 'category_1' AND category = 'category_2'
次のような where 句を生成します。
WHERE category = 'category_2'
両方の条件を AND 処理して応答として空白の配列を返すことを期待しますが、代わりにすべての category_2 オブジェクトを取得します。
スコープを使用する代わりに、次のようなクラス メソッドを使用する場合:
def self.category_1
self.where(:category => 'category_1')
end
期待どおりの結果が得られます。
ここで質問があります。これは期待される Rails の動作ですか? 私の条件は、属性のスコープで最後に呼び出されたものに置き換える必要がありますか、または WHERE 条件を追加する残りのスコープのように AND 句に追加する必要がありますか?