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