模块:Mongoid::Scopeable::ClassMethods

定义于:
lib/mongoid/scopable.rb

实例方法摘要折叠

实例方法详细信息

# default_scopeable?true | false

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

例子:

是否可以应用默认范围?

Band.default_scopable?

返回:

  • ( true | false )

    如果可以应用默认范围。



95
96
97
# File 'lib/mongoid/scopable.rb', 第95行

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

#default_scope(value = nil) ⇒ 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 )

    默认范围。

引发:



83
84
85
86
87
# File 'lib/mongoid/scopable.rb', 第83行

def default_scope( = nil)
   = Proc.new { 产量 } if block_given?
  check_scope_validity()
  self.default_scoping = process_default_scope()
end

#queryableCriteria

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

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

例子:

获取一个 Queryable。

Model.queryable

返回:



107
108
109
110
111
# File 'lib/mongoid/scopable.rb', 第107行

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 )

    范围的条件。

引发:



132
133
134
135
136
137
138
139
140
141
# File 'lib/mongoid/scopable.rb', 第132行

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 )

    限定范围的条件。



158
159
160
# File 'lib/mongoid/scopable.rb', 第158行

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

#作用域哈希

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

例子:

获取类的已定义作用域

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

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

返回:

  • (哈希)

    为此类定义的作用域



51
52
53
54
55
56
57
58
59
# File 'lib/mongoid/scopable.rb', 第51行

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

# unscopedCriteria |对象

注意:

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

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

例子:

获取未指定范围的条件。

Band.unscoped

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

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

返回:

  • ( Criteria | Object )

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



177
178
179
180
181
182
183
184
185
186
187
# File 'lib/mongoid/scopable.rb', 第177行

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

返回:



195
196
197
# File 'lib/mongoid/scopable.rb', 第195行

def with_default_scope
  可查询.with_default_scope
end

# with_scope (criteria) ⇒ Criteria

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

例子:

屈服于标准。

Person.with_scope(criteria)

参数:

  • 条件 ( Criteria )

    要应用的条件。

返回:



209
210
211
212
213
214
215
216
217
# File 'lib/mongoid/scopable.rb', 第209行

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 )

    区块的结果。



227
228
229
230
231
232
# File 'lib/mongoid/scopable.rb', 第227行

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