class Foo < ActiveRecord::Base
default_scope { where(active: false) }
scope :include_deleted, -> { unscoped }
这是行不通的。它返回作用域文档。
alias_method :include_deleted, :unscoped
这也不起作用:
undefined method 'unscoped'
那么,如何定义不受范围限制的范围?
用例:是的,我知道我可以使用
unscoped
。让我尝试解释为什么它可能不是一个好主意。有充分的理由定义另一个具有相同功能的范围。原因是它使代码更易于理解,并使我的意图更加明确。 unscoped
不会告诉读者有关默认范围的任何信息。它只会带来更多问题。如果我们可以定义另一个范围来解释为什么要使用该范围,那么它将为读者提供上下文并帮助他们理解代码。顺便说一句,我看到了一些相关的SO问题,但是它们很老。因此,这个问题与Rails 5有关。这使它与众不同,而不是重复。
使用Mongoid 5,但我认为这不会改变答案。
最佳答案
您可以使用ActiveRecord::QueryMethods#unscope
:
scope :include_deleted, -> { unscope(:where) }
附言首先,通常使用
default_scope
是个坏主意。但是有很多关于它的文章,所以我在这里不做解释。关于ruby-on-rails - 如何创建Rails 5中没有作用域的作用域?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40366903/