2012-04-01 49 views
13

我有具有以下default_scope用户模式:如何绕过default_scope?

default_scope where(account_id: Account.current_account.id)

如果我打电话User.all我总是根据当前帐户的结果。

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

有没有办法做到这一点?

回答

20

是的,用unscoped

User.unscoped.all 
+0

完美,谢谢! – Nathan 2012-04-01 22:19:29

+2

_警告:_检查在[这个答案](http://stackoverflow.com/a/4166950/2859525)关于使用'unscoped'解决这个问题的注意事项。 – Todd 2016-12-30 21:24:53

+0

这不是一个好的答案,我们刚刚经历了一种情况,'unscoped'在测试中完全毁了我们的结果集。 – 2017-05-26 13:33:06

0

这些天来,正确的方法是使用unscope,这将只删除范围的明确组成部分。例如:

class User < ActiveRecord::Base 
    default_scope where(account_id: Account.current_account.id) 
    scope :all_accounts, -> { unscope(:account_id) } 
end 

当你编写多个作用域时,这很重要。

当然,首先应用这种默认范围是它自身的反模式。