Ruby on rails 如何绕过默认范围?

Ruby on rails 如何绕过默认范围?,ruby-on-rails,Ruby On Rails,我有一个用户模型,它具有以下默认范围: default\u作用域,其中(account\u id:account.current\u account.id) 如果我调用User.all我总是根据当前帐户得到一个结果 在某些情况下,出于管理目的,我希望绕过该范围,查看系统中的所有用户,而不考虑帐户 有办法做到这一点吗?是的,有 现在,正确的方法是使用unscope,这只会删除作用域的显式部分。例如: class User < ActiveRecord::Base default_scop

我有一个用户模型,它具有以下默认范围:

default\u作用域,其中(account\u id:account.current\u account.id)

如果我调用
User.all
我总是根据当前帐户得到一个结果

在某些情况下,出于管理目的,我希望绕过该范围,查看系统中的所有用户,而不考虑帐户

有办法做到这一点吗?

是的,有


现在,正确的方法是使用
unscope
,这只会删除作用域的显式部分。例如:

class User < ActiveRecord::Base
  default_scope where(account_id: Account.current_account.id)
  scope :all_accounts, -> { unscope(:account_id) }
end
class用户{unscope(:account\u id)}
结束
当您组合多个作用域时,这一点很重要


当然,首先应用这种默认范围本身就是一种反模式。

警告:查看有关使用
unscoped
解决此问题的注释中的注意事项。这不是一个很好的答案,我们刚刚经历了一种情况,
unscoped
完全破坏了我们的测试结果集。
class User < ActiveRecord::Base
  default_scope where(account_id: Account.current_account.id)
  scope :all_accounts, -> { unscope(:account_id) }
end