类:Mongoid::Association::Referenced::HasMany::Enumerable
- 继承:
-
对象
- 对象
- Mongoid::Association::Referenced::HasMany::Enumerable
- 扩展方式:
- 可转发
- 包括:
- 可枚举
- 定义于:
- lib/mongoid/association/referenced/has_many/enumerable.rb
Overview
此类是所有引用关联的包装器,这些关联的目标可以是条件或 _loaded 文档大量。 这可以处理这两种情况或两种情况的组合。
实例属性摘要折叠
-
# _used ⇒ 对象
三个主要实例变量是文档集合。
-
# _used 已附加的文档。 (Documentsthathavebeenappended.) ⇒ 对象
三个主要实例变量是文档集合。
-
# _loaded ">对象
三个主要实例变量是文档集合。
-
# _loaded 已加载的持久化文档。 (Persisteddocumentsthathavebeen_loaded.) ⇒ 对象
三个主要实例变量是文档集合。
-
# _unloaded ">对象
三个主要实例变量是文档集合。
-
#_unloaded 表示持久化Docs的条件。 (Acriteriarepresentingpersisteddocs。) ⇒ 对象
三个主要实例变量是文档集合。
实例方法摘要折叠
-
# << (文档) ⇒ 文档(又作:#push)
将文档附加到可枚举值。
-
# == (other) ⇒ true | false
检查该可枚举对象是否等于其他对象。
-
# === (other) ⇒ true | false
检查可枚举项与为 case 语句提供的对象的相等性。
-
# _loaded? ⇒ true | false
可枚举项是否已 _loaded? 如果条件已执行或我们手动加载整个内容,则为 true。
-
#任何? (*args) ⇒ true | false
返回关联是否包含任何文档,可以选择是否受所提供的筛选器约束。
-
# as_json (options = {}) ⇒ 哈希
将 #as_json 发送到条目,而不进行编码。
-
# clear ⇒ Array<Document>
清除此可枚举值中的所有文档。
-
# clone ⇒ Array<Document>
克隆可枚举值中的每个文档。
-
#delete(document) {|doc| ... } ⇒ Document
从可枚举对象中删除提供的文档。
-
# delete_if (&block) ⇒ Array<Document>
删除可枚举 for区块中返回 true 的每个文档。
-
#each ⇒ true
迭代此可枚举值必须处理几种不同的情况。
-
#为空? ⇒ true | false
可枚举项是否为空? 将根据是否为 _loaded 来确定计数是否为零。
-
#first(limit = nil) ⇒ Document
获取可枚举值中的第一个文档。
-
# in_memory ⇒ Array<Document>
返回该可枚举值中已 _loaded 或 _Added 的所有文档。
-
# include? (doc) ⇒ true | false
目标是否包括所提供的文档?
-
#initialize (target, base = nil,association = nil) ⇒ Enumerable
构造函数
使用条件或数组初始化新的可枚举项。
-
#检查⇒ string
检查只会检查条目是否有良好的数组式打印。
-
#last(limit = nil) ⇒ Document
获取可枚举值中的最后一个文档。
-
# marshal_dump ⇒ Array<Object>
提供将可枚举代理转储到 Marshal.dump 所需的数据。
-
# marshal_load (data) ⇒ Array<Object>
加载 Marshal.load 可枚举代理所需的数据。
-
#reset ⇒ false
将可枚举重置回其持久状态。
-
# reset_unloaded (criteria) ⇒ 对象
用新对象重置底层已卸载的条件对象。
-
# respond_to? (name, include_private = false) ⇒ true | false
此枚举是否响应提供的方法?
-
# size "> Integer (整数)(又作:#length)
获取此可枚举值的总大小。
-
# to_json (options = {}) ⇒ string
将 #to_json 发送到条目。
-
# uniq ⇒ Array<Document>
返回可枚举中的所有唯一文档。
构造函数详情
#initialize(target, base = nil, association = nil) ⇒ Enumerable
使用条件或数组初始化新的可枚举项。
262 263 264 265 266 267 268 269 270 271 272 273 274 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 262 def 初始化(目标, 基础 = nil, 关联 = nil) @_base = 基础 @_association = 关联 if 目标.is_a?(条件) @_used, @exected, @_loaded, @_unloaded = {}, false, {}, 目标 else @_used, @exected = {}, true @_loaded = 目标.注入({}) do |_target, doc| _target[doc._id] = doc if doc _target end end end |
实例属性详细信息
# _used ⇒对象
三个主要实例变量是文档集合。
21 22 23 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 21 def _used @_used end |
# _used 已附加的文档。 (Documentsthathavebeenappended.) ⇒对象
三个主要实例变量是文档集合。
21 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 21 attr_accessor :_used, :_loaded, :_unloaded |
# _loaded ">对象
三个主要实例变量是文档集合。
21 22 23 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 21 def _loaded @_loaded end |
# _loaded 已加载的持久化文档。 (Persisteddocumentsthathavebeen_loaded.) ⇒对象
三个主要实例变量是文档集合。
21 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 21 attr_accessor :_used, :_loaded, :_unloaded |
# _unloaded ">对象
三个主要实例变量是文档集合。
21 22 23 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 21 def _unloaded @_unloaded end |
#_unloaded 表示持久化Docs的条件。 (Acriteriarepresentingpersisteddocs。) ⇒对象
三个主要实例变量是文档集合。
21 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 21 attr_accessor :_used, :_loaded, :_unloaded |
实例方法详细信息
# << (文档) ⇒ Document也称为: push
将文档附加到可枚举值。
60 61 62 63 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 60 def <<(文档) _used[文档._id] = 文档 self end |
# == (other) ⇒ true | false
检查该可枚举对象是否等于其他对象。
33 34 35 36 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 33 def ==(其他) return false 除非 其他.respond_to?(:entries) 条目 == 其他.条目 end |
# === (other) ⇒ true | false
检查可枚举项与为 case 语句提供的对象的相等性。
47 48 49 50 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 47 def ===(其他) return false 除非 其他.respond_to?(:entries) 条目 === 其他.条目 end |
# _loaded? ⇒ true | false
可枚举项是否已 _loaded? 如果条件已执行或我们手动加载整个内容,则为 true。
353 354 355 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 353 def _loaded? !!@exected end |
#任何? (*args) ⇒ true | false
返回关联是否包含任何文档,可以选择是否受所提供的筛选器约束。
如果关联具有任何持久化文档并且具有任何尚未持久化文档,则此方法返回 true。
如果关联已加载,此方法将检查加载的文档,而不查询数据库。 如果未加载关联,则无参数和无块版本不会加载关联;其他版本(委托给 Enumerable)可能会也可能不会完全加载关联,具体取决于它是否迭代完成。
此方法可以采用一个参数和一个区块。 参数或区块的行为将委托给标准库 Enumerable 模块。
请注意,当 Enumerable 的 any?方法同时使用区块和模式进行调用,则该方法仅使用模式。
225 226 227 228 229 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 225 def 任何?(*args) return 超 if args.任何? || block_given? !空? end |
# as_json (options = {}) ⇒哈希
将 #as_json 发送到条目,而不进行编码。
469 470 471 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 469 def as_json( = {}) 条目.as_json() end |
# clear ⇒ Array< Document >
清除此可枚举值中的所有文档。 如果传递了一个区块,它将让出内存中的每个文档。
79 80 81 82 83 84 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 79 def 清除 if block_given? in_memory { |doc| 产量(doc) } end _loaded.清除 和 _used.清除 end |
# clone ⇒ Array< Document >
这会将所有文档加载到内存中。
克隆可枚举值中的每个文档。
94 95 96 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 94 def 克隆 收集 { |doc| doc.克隆 } end |
#delete(document) {|doc| ... } ⇒ Document
从可枚举对象中删除提供的文档。
106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 106 def 删除(文档) doc = (_loaded.删除(文档._id) || _used.删除(文档._id)) 除非 doc if _unloaded && _unloaded.WHERE(_id: 文档._id).存在吗? 产量(文档) if block_given? return 文档 end end 产量(doc) if block_given? doc end |
# delete_if (&block) ⇒ Array< Document >
此操作会从数据库加载所有文档。
删除可枚举 for区块中返回 true 的每个文档。
129 130 131 132 133 134 135 136 137 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 129 def delete_if(和块) load_all! Deleted = in_memory.SELECT(和块) Deleted.每 do |doc| _loaded.删除(doc._id) _used.删除(doc._id) end self end |
#each ⇒ true
迭代此可枚举值必须处理几种不同的情况。
如果该可枚举项的条件是 _loaded 到内存中,那么它就会让出所有 _loaded Docs和所有 _used Docs 。
如果该可枚举对象尚未加载条件,则会在加载文档时遍历游标,然后遍历已添加的Docs 。
如果没有传递任何区块,则会返回一个包含所有Docs的枚举器。
162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 162 def 每 除非 block_given? return to_enum end if _loaded? _loaded.each_pair do |id, doc| 文档 = _used.删除(doc._id) || doc set_base(文档) 产量(文档) end else unloaded_documents.每 do |doc| 文档 = _used.删除(doc._id) || _loaded.删除(doc._id) || doc _loaded[文档._id] = 文档 set_base(文档) 产量(文档) end end _used.each_pair do |id, doc| 产量(doc) end @exected = true end |
#为空? ⇒ true | false
可枚举项是否为空? 将根据是否为 _loaded 来确定计数是否为零。
193 194 195 196 197 198 199 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 193 def 空? if _loaded? in_memory.空? else _used.空? && !_unloaded.存在吗? end end |
#first(limit = nil) ⇒ Document
在没有对条件定义其他排序的情况下自动对_id添加排序,可能会导致性能问题。 如果在使用 #first 或 #last 时遇到意外的性能下降,请改用 #take。 请注意,#take 不保证顺序。
获取可枚举值中的第一个文档。 将首先检查持久保存的文档。 不加载整个可枚举值。
246 247 248 249 250 251 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 246 def first(limit = nil) _loaded.try(:values).try(:first) || _used[(ul = _unloaded.try(:first, limit)).try(:_id)] || ul || _used.values.try(:first) end |
# in_memory ⇒数组< Document >
当传递一个区块时,它会生成每个文档。
返回该可枚举值中已 _loaded 或 _Added 的所有文档。
309 310 311 312 313 314 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 309 def in_memory docs = (_loaded.values + _used.values) docs.每 do |doc| 产量(doc) if block_given? end end |
# include? (doc) ⇒ true | false
目标是否包括所提供的文档?
284 285 286 287 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 284 def 包括?(doc) return 超 除非 _unloaded _unloaded.WHERE(_id: doc._id).存在吗? || _used.has_key?(doc._id) end |
#检查⇒ string
检查只会检查条目是否有良好的数组式打印。
296 297 298 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 296 def 检查 条目.检查 end |
#last(limit = nil) ⇒ Document
在没有对条件定义其他排序的情况下自动对_id添加排序,可能会导致性能问题。 如果在使用 #first 或 #last 时遇到意外的性能下降,请改用 #take。 请注意,#take 不保证顺序。
获取可枚举值中的最后一个文档。 将首先检查新文档。 不加载整个可枚举值。
331 332 333 334 335 336 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 331 def last(limit = nil) _used.values.try(:last) || _loaded.try(:values).try(:last) || _used[(ul = _unloaded.try(:last, limit)).try(:_id)] || ul end |
# marshal_dump ⇒ Array<Object>
提供将可枚举代理转储到 Marshal.dump 所需的数据。
363 364 365 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 363 def marshal_dump [_used, _loaded, _unloaded, @exected] end |
# marshal_load (data) ⇒ Array<Object>
加载 Marshal.load 可枚举代理所需的数据。
373 374 375 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 373 def marshal_load(数据) @_used, @_loaded, @_unloaded, @exected = 数据 end |
#reset ⇒ false
将可枚举重置回其持久状态。
383 384 385 386 387 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 383 def 重置 _loaded.清除 _used.清除 @exected = false end |
# reset_unloaded (criteria) ⇒对象
用新对象重置底层已卸载的条件对象。 使用我的 HABTM 关联来保持底层数组同步。
396 397 398 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 396 def reset_unloaded(条件) @_unloaded = 条件 if _unloaded.is_a?(条件) end |
# respond_to? (name, include_private = false) ⇒ true | false
此枚举是否响应提供的方法?
410 411 412 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 410 def respond_to?(名称, include_private = false) [].respond_to?(名称, include_private) || 超 end |
# size ⇒ Integer也称为:长度
获取此可枚举值的总大小。 这是所有持久化和非持久化文档的组合。
421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 421 def size # 如果 _unloaded 存在,则它将匹配文档设立 # 属于此关联且已持久化的 # 到数据库。在以下情况下必须考虑这设立文档: # 计算关联的大小,以及任何具有 # 自从添加以来。 if _unloaded if _used.任何? # 请注意,_used 可能包括已_unloaded 的记录 # matches.如果为关联分配了一个大量,则会出现这种情况 # 个项目,其中一些已经是关联的元素。 # # 因此,我们需要确保 _unloaded.count 排除任何元素 # 已存在于 _used 中。 数数 = _unloaded.not(:_id.in => _used.values.map(和:id)).数数 数数 + _used.values.数数 else _unloaded.数数 end else _loaded.数数 + _used.数数 end end |
# to_json (options = {}) ⇒ string
将 #to_json 发送到条目。
457 458 459 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 457 def to_json( = {}) 条目.to_json() end |
#uniq ⇒ Array<Document>
此操作会从数据库加载所有文档。
返回可枚举中的所有唯一文档。
481 482 483 |
# File 'lib/mongoid/association/referenced/has_many/enumerable.rb', line 481 def uniq 条目.uniq end |