我有具有以下default_scope用户模式:如何绕过default_scope?
default_scope where(account_id: Account.current_account.id)
如果我打电话User.all
我总是根据当前帐户的结果。
在某些情况下,出于管理目的,我想绕过该范围并查看系统中的所有用户,而不考虑帐户。
有没有办法做到这一点?
我有具有以下default_scope用户模式:如何绕过default_scope?
default_scope where(account_id: Account.current_account.id)
如果我打电话User.all
我总是根据当前帐户的结果。
在某些情况下,出于管理目的,我想绕过该范围并查看系统中的所有用户,而不考虑帐户。
有没有办法做到这一点?
是的,用unscoped。
User.unscoped.all
这些天来,正确的方法是使用unscope
,这将只删除范围的明确组成部分。例如:
class User < ActiveRecord::Base
default_scope where(account_id: Account.current_account.id)
scope :all_accounts, -> { unscope(:account_id) }
end
当你编写多个作用域时,这很重要。
当然,首先应用这种默认范围是它自身的反模式。
完美,谢谢! – Nathan 2012-04-01 22:19:29
_警告:_检查在[这个答案](http://stackoverflow.com/a/4166950/2859525)关于使用'unscoped'解决这个问题的注意事项。 – Todd 2016-12-30 21:24:53
这不是一个好的答案,我们刚刚经历了一种情况,'unscoped'在测试中完全毁了我们的结果集。 – 2017-05-26 13:33:06