【发布时间】:2016-11-01 19:03:32
【问题描述】:
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,但我认为这不会改变答案。
【问题讨论】:
标签: ruby-on-rails activerecord ruby-on-rails-5 scoping