【问题标题】:scope in rails 4 , how to add conditionsrails 4中的范围,如何添加条件
【发布时间】:2014-10-17 08:24:51
【问题描述】:

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

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

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

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

我尝试在模型中进行会话,但我认为这不是一个好主意,请给我一些建议

【问题讨论】:

  • 我的回答有帮助吗?

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


【解决方案1】:

首先,你不应该在方法和带有参数的括号之间放置空格:

where('locked_at is NULL')

第二。如果您的管理员已登录,您可能应该简单地使用unscoped

User.unscoped

避免使用您的默认范围。

【讨论】:

  • 我们可以只取消默认范围吗?
【解决方案2】:

您可以使用 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,那么只有它应该是无范围的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    相关资源
    最近更新 更多