我在 Active Record (3.2.13) 中遇到了一些意外行为:
我的模型上有一个简单的范围:
class User < ActiveRecord::Base
scope :verified, lambda { where('verified = 1') }
end
这可以单独使用:
User.verified.to_sql
#=> "SELECT \"users\".* FROM \"users\" WHERE (verified = 1)"
当我连接where
- 子句时,它们会and
按预期进行编辑:
User.where(company_id: 1).where(company_id: 2).to_sql
"SELECT \"users\".* FROM \"users\" WHERE \"users\".\"company_id\" = 1 AND \"users\".\"company_id\" = 2"
问题:
但是,当我链接一个范围时,我的第一个 where 子句是 nuked,最后一个在合并中获胜:
User.where(company_id: 1).where(company_id: 2).verified.to_sql
"SELECT \"users\".* FROM \"users\" WHERE \"users\".\"company_id\" = 2 AND (verified = 1)"
如何在与现有条件的关系上应用范围?
(这些现有条件是通过康康建立的load_and_authorize_resource
,所以我不能在应用我的范围后where
只应用这些条款。)