我在我的模型中使用默认范围
def self.default_scope
where ('locked_at IS NULL' )
end
所以没有人可以搜索锁定的用户,但我想如果登录的用户是管理员,那么他应该能够找到锁定的用户,我不知道它将如何工作
在数据库中,在用户表中我有列名“admin”,它告诉我们谁是管理员。
我在模特中尝试过会议,但我认为这不是一个好主意,请建议我别的什么
答案 0 :(得分:2)
首先,你不应该在方法和括号之间放置空格及其参数:
where('locked_at is NULL')
二。如果您的管理员已登录,您可能只需使用unscoped
:
User.unscoped
避免使用默认范围。
答案 1 :(得分:1)
您可以使用unscoped
返回此课程的范围,而不考虑default_scope
这样的事情:
class User < ActiveRecord::Base
def self.default_scope
where ('locked_at IS NULL')
end
end
=> User.all # Fires "SELECT * FROM users WHERE locked_at = NULL"
=> User.unscoped.all if current_user.admin# Fires "SELECT * FROM users"
请勿忘记在无范围内放置if
条件。因为你提到用户表有admin
列,我认为它有布尔类型。如果它是true
那么只有它应该没有范围。