我有一个简单的类定义如下
class User < ApplicationRecord
scope :active, lambda {
puts User.all.to_sql
puts self.to_sql
where(inactive: false)
}
当我运行这个User.where('id = ?',1).active
时,那么puts User.all.to_sql
和puts self.to_sql
都输出相同的sql。
"选择"users"。* FROM "users"WHERE (id = 1)">
"选择"users"。* FROM "users"WHERE (id = 1)">
我知道我可以使用User.unscoped.all
来删除where子句,但是为什么在这种情况下类级别范围不同?
mu is to short
帮我找到了这个。这是一个在rails 6.1中修复的错误。
https://guides.rubyonrails.org/6_1_release_notes.html
命名作用域链不再将作用域泄漏给类级查询方法。