クラス: Mongoid::関連付け::埋め込み::埋め込みMany::Proxy

継承:
  • オブジェクト
すべて表示
次による拡張機能。
クラスメソッド
次のことが含まれます。
バッチ可能
定義:
lib/mongoid/関連付け/ embedded/ embedded/ embeddeds_many/proxy.rb

Overview

embeddeds_many 関連付け用の Transparent プロキシ。 このクラスのインスタンスは、親ドキュメントで関連付け getter メソッドを呼び出すと返されます。 このクラスは Mongoid::関連付け::Proxy から継承し、そのメソッドのほとんどを関連付けのターゲット、つまり子ドキュメントの配列に転送します。

名前空間で定義済み

Modules: クラスメソッド

定数の概要

プロキシから継承された定数

プロキシ::KEEP

インスタンス属性の概要

プロキシから継承された属性

#_association, #_base, #_target

インスタンス メソッドの概要を折りたたむ

Classメソッドに含まれるメソッド

fast_loader埋め込みforeign_key_supfix

Batchableに含まれるメソッド

#batch_client#batch_insert#batch_remove#batch_replace

位置から含まれるメソッド

位置的に

多くから継承されたメソッド

#空白?#create 、#create 、 #create#find_or_create_by#find_or_create_by.#find_or_initialize_by#nil?# response_toか。#scoped#serialize_hash

プロキシから継承されたメソッド

apply_ordering#extend_proxies#klas#reset_unloaded#subAtlas

マーシャリング可能なに含まれるメソッド

#merger_dump#merger_load

コンストラクターの詳細

#初期化(ベース、ターゲット、関連付け)= Many

新しい embedded_many 関連付けをインスタンス化します。

例:

新しい関連付けを作成します。

Many.new(person, addresses, association)

パラメーター:



67
68
69
70
71
72
73
74
75
76
77
# ファイル 'lib/mongoid/関連付け/埋め込み/埋め込み_many/proxy.rb' 行67

デフォルト 初期化(ベース, ターゲット, 関連付け)
  スーパー 行う
    _ target.each_with_index 行う |doc, index|
      統合(doc)
      doc._index = index
    end
    update_attributes_hash
    @_unscoped = _ target.dup
    @_ target = scope(_ target)
  end
end

動的メソッド処理

このクラスはメソッド_欠落メソッドを通じて動的メソッドを処理します

#メソッド_欠落 =基準値 |オブジェクト(プライベート)

ターゲット配列が指定されたメソッドに応答しない場合は、クラス上の名前付きスコープまたは基準を見つけて、呼び出しを送信します。

メソッドが配列に存在する場合は、デフォルトのプロキシ動作を使用します。

TODO: response_to_Missing を使用していることを確認します

anywhere we define method_missing.

rust : を無効化します。

パラメーター:

  • name シンボル | string

    メソッドの名前。

  • *args オブジェクト...

    メソッド引数。

  • & ブロック

    渡す任意のブロック。

次の値を返します。

  • 条件| オブジェクト

    ターゲットからの Criteria または戻り値。



490
491
492
493
494
495
496
# ファイル 'lib/mongoid/関連付け/埋め込み/埋め込み_many/proxy.rb' 行490

ruby2_keywords デフォルト メソッド_欠落(name, *args, &ブロック)
  return スーパー 場合 _ target.respond_to?(name)

  klass.送信(:with_scope, 条件) 行う
    条件.public_send(name, *args, &ブロック)
  end
end

インスタンス メソッドの詳細

# < (*args) =オブジェクト名: push

ドキュメントまたはドキュメントの配列を関連付けに追加します。 プロセス内で親を設定し、インデックスを更新します。

例:

ドキュメントを追加します。

person.addresses << address

ドキュメントをプッシュします。

person.addresses.push(address)

パラメーター:



89
90
91
92
93
94
95
96
97
98
99
100
# ファイル 'lib/mongoid/関連付け/埋め込み/埋め込み_many/proxy.rb' 行89

デフォルト <(*args)
  docs = args.平面
  return ただし、 docs.any?
  return concat(docs) 場合 docs.サイズ > 1

  docs.最初に.タップ 行う |doc|
    追加(doc)
    doc.保存 場合 永続的かどうか & & !_assigning?
  end

  自己
end

_remove (#document) =オブジェクト

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

コレクション*メモリ内: から 1 つのドキュメントを削除します。 変更は保持されません

パラメーター:



236
237
238
239
240
241
# ファイル 'lib/mongoid/関連付け/埋め込み/埋め込み_many/proxy.rb' 行236

デフォルト _remove(ドキュメント)
  _ target.delete_one(ドキュメント)
  _unscoped.delete_one(ドキュメント)
  update_attributes_hash
  reindex
end

# as_document = 配列<Hash>

この関連付けを、データベース内のその表現として取得します。

例:

関連付けを属性ハッシュに変換する。

person.addresses.as_document

次の値を返します。

  • <Hash>配列 )

    db に保存されている関連付け。



110
111
112
# ファイル 'lib/mongoid/関連付け/埋め込み/埋め込み_many/proxy.rb' 行110

デフォルト as_document
  as_attributes.コレクション { |attrs| BSON::ドキュメント.新着情報(attrs) }
end

ビルド番号のビルド(属性 = {}、タイプ = nil) =ドキュメント= new

関連付け内に新しいドキュメントを構築し、それをターゲットに追加します。 サブクラスを指定する場合は、任意の型を取ります。

例:

関連付けに新しいドキュメントを構築します。

person.people.build(:name => "Bozo")

パラメーター:

  • 属性 ハッシュ (デフォルトは{}です)

    ドキュメントを構築する属性。

  • タイプ クラス (デフォルトはnil

    ドキュメントを構築するための任意のクラス。

次の値を返します。



138
139
140
141
142
143
144
145
146
147
# ファイル 'lib/mongoid/関連付け/埋め込み/埋め込み_many/proxy.rb' 行138

デフォルト 構築(属性 = {}, タイプ = nil)
  工場.execution_Build(タイプ || _関連付け.klass, 属性, execution_colbacks: false).タップ 行う |doc|
    追加(doc)
    doc.apply_post_processed_defaults
    ノードの数 doc 場合 ブロック_指定
    doc.run_pending_shellbacks
    doc.run_colbacks(: build) { doc }
    _base._reset_memoized_descendants.
  end
end

#クリア=自己

関連付けをクリアします。 ドキュメントがすでに保存されている場合は、 db からドキュメントが削除されます。

ホスト ドキュメントが永続化されていないが、その _id が永続化されたドキュメントと一致する場合、関連付けに対して #client を呼び出すと、アプリケーション内のドキュメントのセット(ホストにロードされる)が次のものとは異なる場合でも、関連付けのドキュメントがデータベースから削除されます。データベース内にある と のいずれの関連付けでも、ホストには永続化されたドキュメントが含まれていない可能性があります。

例:

関連付けをクリアします。

person.addresses.clear

次の値を返します。

  • 自己

    空の関連付け。



165
166
167
168
169
# ファイル 'lib/mongoid/関連付け/埋め込み/埋め込み_many/proxy.rb' 行165

デフォルト クリア
  batch_client(_ target.dup)
  update_attributes_hash
  自己
end

#concat(docs) ⇒ Array<Document>

ドキュメントの配列を関連付けに追加します。 ドキュメントを 1 つずつ保持するのではなく、バッチ挿入を実行します。

例:

他のドキュメントと連結します。

person.addresses.concat([ address_one, address_two ])

パラメーター:

次の値を返します。



123
124
125
126
# ファイル 'lib/mongoid/関連付け/埋め込み/埋め込み_many/proxy.rb' 行123

デフォルト concat(docs)
  batch_insert(docs) ただし、 docs.空の場合
  自己
end

#count(*args, &block) ⇒ Integer

データベースに実際に保存された、関連付け内のドキュメントの数を返します。

ドキュメントの合計数が必要な場合は、 #size を使用します。

引数またはブロックが存在する場合、#count はtargetの #count メソッドに委任し、永続化されたドキュメントと非永続ドキュメントの両方を含むようになります。

例:

保存されたドキュメントの数を取得します。

person.addresses.count

ブロックに一致するすべてのドキュメントの数を取得します。

person.addresses.count { |a| a.country == "FR" }

で を使用しますか。 永続化されたドキュメントをカウントするには、ブロック内で実行します。

person.addresses.count { |a| a.persisted? && a.country == "FR" }

パラメーター:

  • *args オブジェクト...

    ターゲットに委任する引数。

次の値を返します。

  • (整数)

    「」でフラグ付けされる、永続化された埋め込みDocsの合計数。 使用して複数のドキュメントを挿入できます。



193
194
195
196
197
# ファイル 'lib/mongoid/関連付け/埋め込み/埋め込み_many/proxy.rb' 行193

デフォルト count(*args, &ブロック)
  return _ target.count(*args, &ブロック) 場合 args.any? || ブロック

  _ target.count(&: 永続的か)
end

# delete (ドキュメント) =ドキュメント| nil別名: delete_one

指定されたドキュメントをターゲットから削除します。 このメソッドは、操作の発生後に配列のインデックスを再インデックス化するためにプロキシされます。

例:

関連付けからドキュメントを削除します。

person.addresses.delete(address)

パラメーター:

次の値を返します。

  • (Document | nil)

    削除されたドキュメント、または削除されていない場合は nil 。



208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
# ファイル 'lib/mongoid/関連付け/埋め込み/埋め込み_many/proxy.rb' 行208

デフォルト 削除(ドキュメント)
  execution_colbacks_round(:remove, ドキュメント) 行う
    _ target.delete_one(ドキュメント).タップ 行う |doc|
      場合 doc & & !_bining?
        _unscoped.delete_one(doc)
        場合 _assigning?
          _base.add_atomic_pull(doc)
        else
          doc.削除(次を抑制します。 true)
          unbind_one(doc)
        end
        update_attributes_hash
      end
      reindex
    end
  end
end

# delete_all (条件 = {}) =整数

コールバックを実行せずに、関連付けられているすべてのドキュメントを削除します。

例:

関連付けからすべてのドキュメントを削除します。

person.addresses.delete_all

関連付けからドキュメントを条件付きで削除します。

person.addresses.delete_all({ :street => "Bond" })

パラメーター:

  • 条件 ハッシュ (デフォルトは{}です)

    削除するドキュメントの条件。

次の値を返します。

  • (整数)

    削除されたドキュメントの数。



254
255
256
# ファイル 'lib/mongoid/関連付け/埋め込み/埋め込み_many/proxy.rb' 行254

デフォルト delete_all(条件 = {})
  delete_all(条件, :delete)
end

delete_if ~ 埋め込みMany::Proxy |列挙型

指定されたブロックが true を返すすべてのドキュメントを削除します。

例:

一致するドキュメントを削除します。

person.addresses.delete_if do |doc|
  doc.state == "GA"
end

次の値を返します。

  • 埋め込み

    プロキシ またはブロックが提供されていない場合は列挙型。



267
268
269
270
271
272
273
# ファイル 'lib/mongoid/関連付け/埋め込み/埋め込み_many/proxy.rb' 行267

デフォルト delete_if
  return スーパー ただし、 ブロック_指定

  _ target.dup. { |doc| 削除(doc) 場合 ノードの数 doc }

  自己
end

#破棄_all (条件 = {}) =整数

コールバックを実行しながら、関連付けられているすべてのドキュメントを破棄します。

例:

関連付けからすべてのドキュメントを破棄します。

person.addresses.destroy_all

関連付けからドキュメントを条件付きで破棄します。

person.addresses.destroy_all({ :street => "Bond" })

パラメーター:

  • 条件 ハッシュ (デフォルトは{}です)

    破棄するドキュメントの条件。

次の値を返します。

  • (整数)

    破棄されたドキュメントの数。



286
287
288
# ファイル 'lib/mongoid/関連付け/埋め込み/埋め込み_many/proxy.rb' 行286

デフォルト delete_all(条件 = {})
  delete_all(条件, :破棄)
end

が存在する場合(id_or_条件 = :none) = true | false

この関連付け内のドキュメントがデータベースに存在するかどうかを判断します。

例:

永続化されたドキュメントはありますか?

person.posts.exists?

パラメーター:

  • id_or_条件 :none | nil | false | Hash | Object (デフォルトは:none

    :none(デフォルト)の場合、関連付け内に永続化されたドキュメントが存在する場合には true を返します。 nil または false の場合、常に false が返されます。 ハッシュが指定されると、これは関連付け内のドキュメント内で指定された条件に一致するものを検索し、永続化された一致がある場合は true を返します。 その他の引数は ID として解釈され、一致する _id に関連付けられている永続化されたドキュメントの存在をクエリします。

次の値を返します。

  • true | false

    永続化されたドキュメントが存在する場合は true、存在しない場合は false です。



306
307
308
309
310
311
312
313
# ファイル 'lib/mongoid/関連付け/埋め込み/埋め込み_many/proxy.rb' 行306

デフォルト 存在するかどうか(id_or_条件 = :none)
  ケース id_or_条件
  次の場合: :none 次に _ target.any?(&: 永続的か)
  次の場合: nil, false 次に false
  次の場合: ハッシュ 次に WHERE(id_or_条件).any?(&: 永続的か)
  else WHERE(_id: id_or_条件).any?(&: 永続的か)
  end
end

#find {|Object| ... } ⇒ Document | Array<Document> | nil

いくつかの異なる方法で、この関連付け内のドキュメントを検索します。

このメソッドはMongoid::Criteria#findに委任されます。 このメソッドにブロックが指定されていない場合、指定された _id 値に対して 1 つまたは複数のドキュメントが返されます。

このメソッドにブロックが指定されると、ブロックが真実の値を返す現在の Criteria オブジェクトによって見つかったドキュメントのうちの最初のドキュメントが返されます。

例:

ID でドキュメントを検索します。

person.addresses.find(BSON::ObjectId.new)

複数の ID のドキュメントを検索します。

person.addresses.find([ BSON::ObjectId.new, BSON::ObjectId.new ])

ブロックを使用して、最初に一致するドキュメントを検索します。

person.addresses.find { |addr| addr.state == 'CA' }

パラメーター:

  • *args オブジェクト...

    さまざまな引数。

  • & ブロック

    渡す任意のブロック。

結果:

  • オブジェクト

    各列挙可能な要素をブロックに変換します。

次の値を返します。

  • (Document | Array<Document> | nil)

    1 つまたは複数のドキュメント。



340
341
342
# ファイル 'lib/mongoid/関連付け/埋め込み/埋め込み_many/proxy.rb' 行340

デフォルト find(...)
  条件.find(...)
end

#pop(count = nil) ⇒ Document | Array<Document> | nil

関連付けからドキュメントを取り出します。 これは単一または複数のドキュメントであり、変更が自動的に保持されます。

例:

単一のドキュメントを作成します。

relation.pop

複数のドキュメントを配置します。

relation.pop(3)

パラメーター:

  • count 整数 (デフォルトはnil

    入力するドキュメントの数。または、指定されていない場合は1 。

次の値を返します。



365
366
367
368
369
370
# ファイル 'lib/mongoid/関連付け/埋め込み/埋め込み_many/proxy.rb' 行365

デフォルト ポップ(count = nil)
  return [] 場合 count&.zero?

  docs = _ target.last(count || 1). { |doc| 削除(doc) }
  (count.nil? || docs.空の場合) ? docs.最初に : docs
end

#shift(count = nil) ⇒ Document | Array<Document> | nil

関連付けからドキュメントを移行します。 これは単一または複数のドキュメントであり、変更が自動的に保持されます。

例:

単一のドキュメントをシフトします。

relation.shift

複数のドキュメントをシフトします。

relation.shift(3)

パラメーター:

  • count 整数 (デフォルトはnil

    シフトするドキュメントの数。または、指定されていない場合は1 。

次の値を返します。



385
386
387
388
389
390
# ファイル 'lib/mongoid/関連付け/埋め込み/埋め込み_many/proxy.rb' 行385

デフォルト シフト(count = nil)
  return [] 場合 count&.zero?

  docs = _ target.最初に(count || 1). { |doc| 削除(doc) }
  (count.nil? || docs.空の場合) ? docs.最初に : docs
end

置換( Docs ) =

関係内の既存のドキュメントを、指定されたターゲット ドキュメントに置き換えます。

例:

関連付けのターゲットを置き換えます。

person.addresses.substitute([ address ])

パラメーター:

  • docs 配列 は Document > | 配列 は )<Hash>

    置換Docs 。

次の値を返します。

  • が多い

    プロキシされた関連付け。



401
402
403
404
405
# ファイル 'lib/mongoid/関連付け/埋め込み/埋め込み_many/proxy.rb' 行401

デフォルト replacement(docs)
  batch_replace(docs)
  update_attributes_hash
  自己
end

スコープ が設定されていない = Criteria

以前のすべてのスコープが削除された 関連付けを返します。 これは、データベース内のDocsの正確な表現です。

例:

スコープが設定されていないドキュメントを取得します。

person.addresses.unscoped

次の値を返します。

  • 基準

    スコープが設定されていない関連付け。



414
415
416
417
418
419
# ファイル 'lib/mongoid/関連付け/埋め込み/埋め込み_many/proxy.rb' 行414

デフォルト スコープが設定されていない
  criterion = klass.スコープが設定されていない
  criterion.埋め込み = true
  criterion.ドキュメント = _unscoped.delete_if(&:marked_for_destruction)
  criterion
end