我正在使用 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'
我希望这两个条件都与导致一个空白数组作为响应,而不是我得到所有 category_2 对象。
如果不使用作用域,而是使用类方法,例如:
def self.category_1
self.where(:category => 'category_1')
end
我得到了预期的结果。
现在问题来了:这是预期的 Rails 行为吗?我的条件应该被属性的最后调用范围替换,还是应该像其他添加 WHERE 条件的范围一样添加到 AND 子句中?