我有一个带有 2 种类型用户的 Rails 应用程序,经过身份验证和未经身份验证(由数据库中的 email_authenticated:boolean 分隔)。当我创建一个用户时,我希望它未经身份验证,但每次我执行任何功能时,我都想在默认情况下在经过身份验证的列表上执行该功能。我最初尝试通过提供 default_scope 来做到这一点,但发现这会修改保存记录的方式覆盖默认值(例如,在示例中默认值变为 true 而不是 false)
# email_authenticated :boolean default(FALSE), not null
class User < ActiveRecord::Base
default_scope { where(email_authenticated: true) }
scope :authenticated, ->{ where(email_authenticated: true) }
scope :unauthenticated, ->{unscoped.where(email_authenticated: false)}
end
是否有人建议让范围仅适用于搜索,或者以更智能的方式实现我的目标。如果我删除默认范围,我不想每次搜索时都调用 User.authenticated,另一方面,我也不想每次保存时都调用 User.unauthenticated。