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/

10-13 04:49