模块:Mongoid::Factory

扩展方式:
工厂
包含在:
工厂
定义于:
lib/mongoid/factory.rb

Overview

实例化来自数据库的文档。

在命名空间下定义

类: 实例化器

实例方法摘要折叠

实例方法详细信息

# build (klass, properties = nil) ⇒文档

从提供的属性构建新的Document

如果属性包含 klass 的鉴别器键,则此方法会实例化 klass 或 klass 的后代。

如果属性包含鉴别器键(默认为 _type )并且鉴别器值与 klass 的后代不对应,则此方法将创建 klass 的实例。

例子:

构建文档。

Mongoid::Factory.build(Person, { "name" => "Durran" })

参数:

  • klass ( class )

    _type 不存在时要从中实例化的类。

  • 属性 哈希 (默认为: nil

    文档属性。

  • 选项 (哈希)

    一组可自定义的选项

返回:

  • (文档)

    实例化的文档。



154
155
156
# File 'lib/mongoid/factory.rb', line 154

def 构建(klass, 属性 = nil)
  execute_build(klass, 属性)
end

#execute_build (klass, properties = nil, options = {}) ⇒文档

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

注意:

Ruby 2 .x 错误导致选项哈希无法成为关键字参数。 一旦放弃支持Ruby 2 .x 的支持,我们就可以将选项哈希重新实现为关键字参数。 请参阅bugs.Ruby-lang.org/issues/ 15753

执行构建。

参数:

  • klass ( class )

    _type 不存在时要从中实例化的类。

  • 属性 哈希 (默认为: nil

    文档属性。

  • 选项 哈希 (默认为: {}

    要使用的选项。

选项哈希 ( options ):

  • :execute_callbacks ( true | false )

    标志指定是否应运行回调。

返回:

  • (文档)

    实例化的文档。



175
176
177
178
179
180
181
182
183
184
# File 'lib/mongoid/factory.rb', line 175

def execute_build(klass, 属性 = nil, 选项 = {})
  属性 ||= {}
  dvalue = 属性[klass.discriminator_key] || 属性[klass.discriminator_key.to_sym]
  类型 = klass.get_discriminator_mapping(dvalue)
  if 类型
    类型.construct_document(属性, 选项)
  else
    klass.construct_document(属性, 选项)
  end
end

#execute_from_db (klass,Attributes=nil,criteria=nil,selected_fields=nil,execute_callbacks:Threaded.execute_callbacks?) ⇒文档

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

执行 from_db。

参数:

  • klass ( class )

    _type 不存在时要从中实例化的类。

  • 属性 哈希 (默认为: nil

    文档属性。

  • 条件 条件 (默认为: nil

    可选条件对象。

  • created_fields 哈希 (默认为: nil

    通过 #only 检索的字段。 如果指定了selected_fields,则无法在返回的文档中访问未在其中列出的字段。

  • execute_callbacks ( true | false ) (默认为: Threaded.execute_callbacks?

    此方法是否应调用回调。 如果为 true,则将正常调用回调。 如果为 false,回调将存储在pending_callbacks列表中,调用者负责稍后调用run_pending_callbacks 。 使用此选项可将回调执行推迟到包含嵌入式关联的整个对象图表构建完成。

返回:

  • (文档)

    实例化的文档。



234
235
236
237
238
239
# File 'lib/mongoid/factory.rb', line 234

def execute_from_db(klass, 属性 = nil, 条件 = nil,
                    created_fields = nil,
                    execute_callbacks: 线程化.execute_callbacks?)
  实例化器.new(klass, 属性, 条件, created_fields)
              .实例(execute_callbacks: execute_callbacks)
end

#from_db(klass, attributes = nil, criteria = nil, selected_fields = nil) ⇒ Document

根据从数据库加载的属性构建新的Document

如果属性包含鉴别器键(默认为 _type )并且鉴别器值与 klass 的后代不对应,则此方法会引发 UnknownModel 错误。

如果给出了条件对象,则有两种使用方式:

  1. 如果条件具有通过 #only 指定的字段列表,则仅在返回的文档中填充这些字段。

  2. 如果条件具有引用关联(即,此文档被实例化为另一个文档的关联),则另一个文档也会填充到返回文档的反向关联中(如果存在)。

例子:

构建文档。

Mongoid::Factory.from_db(Person, { "name" => "Durran" })

参数:

  • klass ( class )

    _type 不存在时要从中实例化的类。

  • 属性 哈希 (默认为: nil

    文档属性。

  • 条件 条件 (默认为: nil

    可选条件对象。

  • created_fields 哈希 (默认为: nil

    通过 #only 检索的字段。 如果指定了selected_fields,则无法在返回的文档中访问未在其中列出的字段。

返回:

  • (文档)

    实例化的文档。



212
213
214
# File 'lib/mongoid/factory.rb', line 212

def from_db(klass, 属性 = nil, 条件 = nil, created_fields = nil)
  execute_from_db(klass, 属性, 条件, created_fields)
end