Ruby on rails 相同属性上的Rails 3.2作用域将被替换,而不是链接

Ruby on rails 相同属性上的Rails 3.2作用域将被替换,而不是链接,ruby-on-rails,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3.2,我正在使用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 ca

我正在使用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 category = 'category_2'
生成where子句,如:

WHERE category = 'category_1' AND category = 'category_2'
WHERE category = 'category_2'
我希望将这两个条件AND作为响应生成一个空白数组,而不是得到所有category_2对象

如果不使用作用域,而是使用类方法,如:

def self.category_1
  self.where(:category => 'category_1')
end
我得到了预期的结果


现在的问题是:这是预期的rails行为吗?我的条件应该被属性的最后一个调用的作用域替换,还是应该被添加到AND子句中,比如添加WHERE条件的其余作用域?

ActiveRecord试图变得聪明,因为它知道这些条件不可能与一组哈希键重叠。尝试将作用域包装在lambda中以避免出现以下情况:

scope :category_1, lambda { where(:category => 'category_1') }
scope :category_2, lambda { where(:category => 'category_2') }