模块:Mongoid::Scopeable::ClassMethods

定义于:
lib/mongoid/scopable.rb

实例方法摘要折叠

实例方法详细信息

# default_scopeable?true | false

该类是否能够应用默认作用域?

例子:

是否可以应用默认范围?

Band.default_scopable?

返回:

  • ( true | false )

    如果可以应用默认范围。



90
91
92
# File 'lib/mongoid/scopable.rb', 第90行

def default_scopeable?
  default_scoping? && !线程化.without_default_scope?(self)
end

# default_scope (value = nil, &block) ⇒ Proc

为模型添加默认作用域。 除非指定了 #unscoped,否则此范围将应用于所有条件。

例子:

使用条件定义默认范围。

class Band
  include Mongoid::Document
  field :active, type: Boolean
  default_scope where(active: true)
end

使用过程定义默认作用域。

class Band
  include Mongoid::Document
  field :active, type: Boolean
  default_scope ->{ where(active: true) }
end

参数:

  • Proc | Criteria (默认为: nil

    默认范围。

返回:

  • ( Proc )

    默认范围。

引发:



78
79
80
81
82
# File 'lib/mongoid/scopable.rb', 第78行

def default_scope( = nil, )
   = proc() if block_given?
  check_scope_validity()
  self.default_scoping = process_default_scope()
end

#queryableCriteria

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

获取一个 Queryable,它可以是作用域堆栈上的最后一个,也可以是新的。

例子:

获取一个 Queryable。

Model.queryable

返回:



102
103
104
105
106
# File 'lib/mongoid/scopable.rb', 第102行

def 可查询
  Crit = 线程化.current_scope(self) || 条件.new(self)
  Crit.嵌入式 = true if Crit.klass.嵌入式? && !Crit.klass.循环?
  Crit
end

#范围(名称, 值, 区块(&B)) ⇒对象

创建可从类级别访问或通过提供的名称链接到条件的范围。

例子:

创建命名作用域。


class Person
  include Mongoid::Document
  field :active, type: Boolean
  field :count, type: Integer

  scope :active, -> { where(active: true) }
  scope :at_least, ->(count){ where(:count.gt => count) }
end

参数:

  • 名称 (符号)

    作用域的名称。

  • ( Proc )

    范围的条件。

引发:



127
128
129
130
131
132
133
134
135
136
# File 'lib/mongoid/scopable.rb', 第127行

def 范围(名称, , )
  标准化 = 名称.to_sym
  check_scope_validity()
  check_scope_name(标准化)
  _declared_scopes[标准化] = {
    范围: ,
    扩展名: 模块.new()
  }
  define_scope_method(标准化)
end

#scoped (options = nil) ⇒ Criteria

注意:

这将强制应用默认范围。

获取具有正常作用域的文档条件。

例子:

获取条件。

Band.scoped(skip: 10)

参数:

  • 选项 哈希 (默认为: nil

    条件的查询选项。

选项哈希 ( options ):

  • :skip 整数

    要跳过的文档的可选数量。

  • :limit 整数

    要限制的可选文档数量。

  • :sort 数组

    可选排序选项。

返回:

  • ( Criteria )

    限定范围的条件。



153
154
155
# File 'lib/mongoid/scopable.rb', 第153行

def 作用域(选项 = nil)
  可查询.作用域(选项)
end

#作用域哈希

返回为此类定义的所有作用域的哈希值,包括在祖先类上定义的作用域。

例子:

获取类的已定义作用域

class Band
  include Mongoid::Document
  field :active, type: Boolean

  scope :active, -> { where(active: true) }
end
Band.scopes

返回:

  • (哈希)

    为此类定义的作用域



48
49
50
51
52
53
54
# File 'lib/mongoid/scopable.rb', 第48行

def scopes
  defined_scopes = {}
  祖先.reverse_each do |klass|
    defined_scopes.合并!(klass._declared_scopes) if klass.respond_to?(:_declared_scopes)
  end
  defined_scopes.冻结
end

# unscopedCriteria |对象

注意:

这将强制删除默认范围以及使用 .with_scope 应用的任何范围。

在不应用任何范围的情况下获取条件。

例子:

获取未指定范围的条件。

Band.unscoped

在没有作用域的情况下屈服于区块。

Band.unscoped do
  Band.where(name: "Depeche Mode")
end

返回:

  • ( Criteria | Object )

    区块的未限定范围的条件或结果。



172
173
174
175
176
177
178
179
180
181
182
# File 'lib/mongoid/scopable.rb', 第172行

def 未限定作用域
  if block_given?
    without_default_scope do
      with_scope(nil) do
        产量(self)
      end
    end
  else
    可查询.未限定作用域
  end
end

# with_default_scopeCriteria也称为: criteria

获取应用了默认范围的条件(如果可能)。

例子:

获取具有默认范围的条件。

Model.with_default_scope

返回:



190
191
192
# File 'lib/mongoid/scopable.rb', 第190行

def with_default_scope
  可查询.with_default_scope
end

# with_scope (criteria) ⇒ Criteria

将提供的条件推入作用域堆栈,并在生成提供的区块后将其删除。

例子:

屈服于标准。

Person.with_scope(criteria)

参数:

  • 条件 ( Criteria )

    要应用的条件。

返回:



204
205
206
207
208
209
210
211
212
# File 'lib/mongoid/scopable.rb', 第204行

def with_scope(条件)
  上一个 = 线程化.current_scope(self)
  线程化.set_current_scope(条件, self)
  开始
    产量 条件
  确保
    线程化.set_current_scope(上一个, self)
  end
end

# without_default_scope对象

在不应用默认作用域的情况下执行区块。

例子:

在没有默认作用域的情况下执行。

Band.without_default_scope do
  Band.where(name: "Depeche Mode")
end

返回:

  • ( Object )

    区块的结果。



222
223
224
225
226
227
# File 'lib/mongoid/scopable.rb', 第222行

def without_default_scope
  线程化.begin_ without_default_scope(self)
  产量
确保
  线程化.exit_Without_default_scope(self)
end