0

我有一个带有 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。

4

1 回答 1

1

有点像黑客,但你可以这样做:

class User < ActiveRecord::Base
  default_scope { where("email_authenticated = ?", true) }
end

记录在这里:http ://apidock.com/rails/ActiveRecord/Base/default_scope/class 。我刚刚对其进行了测试,它可以工作,对创建没有副作用。

于 2013-06-28T16:16:22.130 回答