不同的default_scope用于在rails中搜索和保存(或者比我现有的实现更好的实现)



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

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

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

此处记录:http://apidock.com/rails/ActiveRecord/Base/default_scope/class.我只是测试了它,它工作,没有副作用的创造。

相关内容

最新更新