我在想象类似的东西:
class User < ApplicationRecord
default_scope -> { where(public: true) }
end
现在无论何时访问用户模型,都应该始终将where(public: true)
附加到查询。因此all
最终会成为all.where(public: true)
。
我试图将这样的内容放到ApplicationRecord
类中以覆盖所有继承模型的行为,因此手动覆盖对我来说不是一个选项。
答案 0 :(得分:1)
如果所有继承模型的default_scope
保持不变,那么您可以考虑将其放在自定义模型中,并让所有其他模型继承该模型
class CustomModel < ApplicationRecord
default_scope -> { where(public: true) }
end
让其他模型继承自那个自定义模型
class A < CustomModel
end
答案 1 :(得分:0)
如果您的所有模型都有public
作为属性,那么您可以通过将default_scope
添加到app/models/application_record.rb
来添加default_scope
;
但是,拥有where(public: true)
not_public
这里有点棘手,因为除非您使用{{1},否则您将无法访问数据unscoped
数据方法:User.unscoped
。
话虽如此,如果你添加一个范围scope :public, -> () { where(public: true) }
并在你想确保你的用户是公开的时候调用它,它会更好:
User.public.find_by(email: 'xxxxx')