rails 4中的范围,如何添加条件

时间:2014-10-17 08:24:51

标签: ruby ruby-on-rails-4 ruby-on-rails-3.2

我在我的模型中使用默认范围

def self.default_scope
    where ('locked_at IS NULL' )
end

所以没有人可以搜索锁定的用户,但我想如果登录的用户是管理员,那么他应该能够找到锁定的用户,我不知道它将如何工作

在数据库中,在用户表中我有列名“admin”,它告诉我们谁是管理员。

我在模特中尝试过会议,但我认为这不是一个好主意,请建议我别的什么

2 个答案:

答案 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那么只有它应该没有范围。