クラス: Mongoid::関連付け::参照::HasMany::Proxy
- 次による拡張機能。
- 転送可能
- 定義:
- build/mongoid- 8.1 /lib/mongoid/asaction/referenced/has_many/proxy.rb
Overview
このクラスは、異なるコレクション内のドキュメント間で 1 対多であるすべての関連付けの動作を定義します。
既知のサブクラスを直接確認
インスタンス属性の概要
プロキシから継承された属性
#_association, #_base, #_target
クラスメソッドの概要を折りたたむ
- 。 Bearer_loader (関連付け、 Docs )= オブジェクト
-
。埋め込み= false
関連付けが埋め込みである場合は true を返します。
インスタンス メソッドの概要を折りたたむ
-
# ` `(*args)=Array=Document ===========================================================<Document>
ドキュメントまたはドキュメントの配列を関連付けに追加します。
-
ビルド番号のビルド(属性 = {}、タイプ = nil) {|doc| ... } = ドキュメント(#new)
属性から新しいドキュメントを作成し、保存せずにこの関連付けに追加します。
-
#concat(documents) ⇒ Array<Document>
ドキュメントの配列を関連付けに追加します。
-
# delete (ドキュメント) = ドキュメント(また: #delete_one)
関連付けからドキュメントを削除します。
-
# delete_all (条件 = nil) = 整数
指定された条件に従って、関連するすべてのドキュメントをデータベースから削除します。
-
# delete_all (条件 = nil) = 整数
指定された条件に従って、関連するすべてのドキュメントをデータベースから破棄します。
-
各~ 配列 <Document>
関連付け内の各ドキュメントを反復処理し、指定された ブロックに生成します。
-
が存在する場合= true | false
この関連付け内のドキュメントがデータベースに存在するかどうかを判断します。
-
#find (*args、 & ブロック) = ドキュメント | Array[Document]|<Document> nil
ID または条件のいずれかに基づいて、関連付けで一致するドキュメントを見つけます。
-
初期化(ベース、ターゲット、関連付け)=プロキシ
コンストラクター
新しい references_many の関連付けをインスタンス化します。
-
#nullify =オブジェクト(#nullify_all)
外部キーと参照を削除して、ベース ドキュメントとターゲット ドキュメント間のすべての関連付けを削除し、プロセス内のターゲット ドキュメントを孤立します。
-
複数のパージ(また: のクリア)
関連付けをクリアします。
-
置換(置換)=多数
関連付け内の既存のドキュメントを、指定されたターゲット ドキュメントに置き換えます。
-
スコープが設定されていない = Criteria
デフォルトのスコープが適用されていないドキュメントの基準を取得します。
多くから継承されたメソッド
#空白? 、 #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 、#init 、# klas 、# reset_unloaded 、 #置換可能
マーシャリング可能なに含まれるメソッド
コンストラクターの詳細
初期化(ベース、ターゲット、関連付け)=プロキシ
新しい references_many の関連付けをインスタンス化します。 逆オブジェクトに外部キーとベースを設定します。
225 226 227 228 229 230 |
ファイル ' build/mongoid- 8.1 /lib/mongoid/as associated/referenced/has_many/proxy.rb '、 行225 デフォルト 初期化(ベース, ターゲット, 関連付け) 列挙 = HasMany::Enumerable.新着情報(ターゲット, ベース, 関連付け) init(ベース, 列挙, 関連付け) 行う MongoDB_ENUS_JAJP 場合 klass. & & !klass.定期的か end end |
動的メソッド処理
このクラスはメソッド_欠落メソッドを通じて動的メソッドを処理します
#メソッド_欠落 =基準値 |オブジェクト(プライベート)
ターゲット配列が指定されたメソッドに応答しない場合は、クラス上の名前付きスコープまたは基準を見つけて、呼び出しを送信します。
メソッドが配列に存在する場合は、デフォルトのプロキシ動作を使用します。
425 426 427 428 429 430 431 432 433 |
ファイル ' build/mongoid- 8.1 /lib/mongoid/as associated/referenced/has_many/proxy.rb '、 行425 ruby2_keywords デフォルト メソッド_欠落(name, *args, &ブロック) 場合 _ target.respond_to?(name) _ target.送信(name, *args, &ブロック) else klass.送信(:with_scope, 条件) 行う 条件.public_send(name, *args, &ブロック) end end end |
クラスメソッドの詳細
。 Bearer_loader (関連付け、 Docs )=オブジェクト
536 537 538 |
ファイル ' build/mongoid- 8.1 /lib/mongoid/as associated/referenced/has_many/proxy.rb '、 行536 デフォルト Bearer_loader(関連付け, docs) より量.新着情報(関連付け, docs) end |
。埋め込み = false
関連付けが埋め込みである場合は true を返します。 この場合は、常に false です。
547 548 549 |
ファイル ' build/mongoid- 8.1 /lib/mongoid/as associated/referenced/has_many/proxy.rb '、 行547 デフォルト false end |
インスタンス メソッドの詳細
# を プッシュ する
ドキュメントまたはドキュメントの配列を関連付けに追加します。 プロセス内で親を設定し、インデックスを更新します。
31 32 33 34 35 36 37 38 39 |
ファイル ' build/mongoid- 8.1 /lib/mongoid/as associated/referenced/has_many/proxy.rb '、 行31 デフォルト <(*args) docs = args.平面 return concat(docs) 場合 docs.サイズ > 1 場合 doc = docs.最初に 追加(doc) doc.保存 場合 永続的かどうか & & !_assigning? & & !doc.検証されていますか? end 自己 end |
ビルド番号のビルド(属性 = {}、タイプ = nil) {|doc| ... } =ドキュメント別名: new
属性から新しいドキュメントを作成し、保存せずにこの関連付けに追加します。
73 74 75 76 77 78 79 80 81 |
ファイル ' build/mongoid- 8.1 /lib/mongoid/as associated/referenced/has_many/proxy.rb '、 行73 デフォルト 構築(属性 = {}, タイプ = nil) doc = 工場.execution_Build(タイプ || klass, 属性, execution_colbacks: false) 追加(doc) doc.apply_post_processed_defaults ノードの数(doc) 場合 ブロック_指定 doc.run_pending_shellbacks doc.run_colbacks(: build) { doc } doc end |
#concat(documents) ⇒ Array<Document>
ドキュメントの配列を関連付けに追加します。 ドキュメントを 1 つずつ保持するのではなく、バッチ挿入を実行します。
52 53 54 55 56 57 58 59 60 61 |
ファイル ' build/mongoid- 8.1 /lib/mongoid/as associated/referenced/has_many/proxy.rb '、 行52 デフォルト concat(ドキュメント) docs, inserts = [], [] ドキュメント.各 行う |doc| 次へ ただし、 doc 追加(doc) 保存_or_遅延(doc, docs, inserts) 場合 永続的かどうか end exists_Delayed(docs, inserts) 自己 end |
# delete (ドキュメント) =ドキュメント別名: delete_one
関連付けからドキュメントを削除します。 これにより、ドキュメントの外部キーが nil に設定されます。 If the dependent options on the association are :delete_all or :destroy the appropriate removal will occur.
95 96 97 98 99 100 101 102 103 104 105 106 |
ファイル ' build/mongoid- 8.1 /lib/mongoid/as associated/referenced/has_many/proxy.rb '、 行95 デフォルト 削除(ドキュメント) execution_colbacks_round(:remove, ドキュメント) 行う _ target.削除(ドキュメント) 行う |doc| 場合 doc unbind_one(doc) cascade!(doc) 場合 !_assigning? end end.タップ 行う delete_unloaded end end end |
# delete_all (条件 = nil) =整数
指定された条件に従って、関連するすべてのドキュメントをデータベースから削除します。
124 125 126 |
ファイル ' build/mongoid- 8.1 /lib/mongoid/as associated/referenced/has_many/proxy.rb '、 行124 デフォルト delete_all(条件 = nil) delete_all(条件, :delete_all) end |
# delete_all (条件 = nil) =整数
指定された条件に従って、関連するすべてのドキュメントをデータベースから破棄します。
140 141 142 |
ファイル ' build/mongoid- 8.1 /lib/mongoid/as associated/referenced/has_many/proxy.rb '、 行140 デフォルト delete_all(条件 = nil) delete_all(条件, :detry_all) end |
各=配列 <ドキュメント>
これにより、関連付け全体がメモリに読み込まれます。
関連付け内の各ドキュメントを反復処理し、指定された ブロックに生成します。
155 156 157 158 159 160 161 |
ファイル ' build/mongoid- 8.1 /lib/mongoid/as associated/referenced/has_many/proxy.rb '、 行155 デフォルト 各 場合 ブロック_指定 _ target.各 { |doc| ノードの数(doc) } else to_enum end end |
が存在する場合= true | false
この関連付け内のドキュメントがデータベースに存在するかどうかを判断します。
関連付けにドキュメントが含まれているが、すべてのドキュメントがアプリケーション内にのみ存在する場合、つまりデータベースに永続化されていない場合、このメソッドは false を返します。
このメソッドは、関連付けがすでにメモリにロードされている場合でも、呼び出しごとにデータベースをクエリします。
176 177 178 |
ファイル ' build/mongoid- 8.1 /lib/mongoid/as associated/referenced/has_many/proxy.rb '、 行176 デフォルト 存在するかどうか 条件.存在するかどうか end |
#find(*args, &block) ⇒ Document | Array<Document> | nil
各引数は、個々の ID、ID の配列、またはネストされた配列にすることができます。 各配列はフラット化されます。
これにより、後の反復処理のために一致するドキュメントがメモリ内に保持されます。
ID または条件のいずれかに基づいて、関連付けで一致するドキュメントを見つけます。
このメソッドはMongoid::Criteria#findに委任されます。 このメソッドにブロックが指定されていない場合、指定された _id 値に対して 1 つまたは複数のドキュメントが返されます。
このメソッドにブロックが指定されると、ブロックが真実の値を返す現在の Criteria オブジェクトによって見つかったドキュメントのうちの最初のドキュメントが返されます。
210 211 212 213 214 |
ファイル ' build/mongoid- 8.1 /lib/mongoid/as associated/referenced/has_many/proxy.rb '、 行210 デフォルト find(*args, &ブロック) 一致する = 条件.find(*args, &ブロック) 配列(一致する).各 { |doc| _ target.プッシュ(doc) } 一致する end |
# nullify =オブジェクトとも呼ばれます: nullify_all
外部キーと参照を削除して、ベース ドキュメントとターゲット ドキュメント間のすべての関連付けを削除し、プロセス内のターゲット ドキュメントを孤立します。
238 239 240 241 242 243 244 |
ファイル ' build/mongoid- 8.1 /lib/mongoid/as associated/referenced/has_many/proxy.rb '、 行238 デフォルト nullify 条件.update_all(foreign_key => nil) _ target.クリア 行う |doc| unbind_one(doc) doc.Changed_attributes.削除(foreign_key) end end |
複数 の または クリア
関連付けをクリアします。 ドキュメントがすでに保存されている場合は、 db からドキュメントが削除されます。
255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 |
ファイル ' build/mongoid- 8.1 /lib/mongoid/as associated/referenced/has_many/proxy.rb '、 行255 デフォルト 消去 ただし、 _関連付け.破壊的か? nullify else after_remove_error = nil 条件.delete_all 多い = _ target.クリア 行う |doc| execution_colback :Before_remove, doc unbind_one(doc) doc.破棄された = true begin execution_colback : after_remove, doc ヘルプ => e after_remove_error = e end end 発生 after_remove_error 場合 after_remove_error 多い end end |
置換(置換)=多数
関連付け内の既存のドキュメントを、指定されたターゲット ドキュメントに置き換えます。 新しいターゲットが nil の場合は、必要な削除を実行します。
288 289 290 291 292 293 294 295 296 297 298 299 300 301 |
ファイル ' build/mongoid- 8.1 /lib/mongoid/as associated/referenced/has_many/proxy.rb '、 行288 デフォルト replacement(replacement) 場合 replacement new_docs, docs = replacement.compact, [] new_ids = new_docs.map { |doc| doc._id } delete_not_in(new_ids) new_docs.各 行う |doc| docs.プッシュ(doc) 場合 doc.送信(foreign_key) != _base.送信(_関連付け.プライマリ_キー) end concat(docs) else 消去 end 自己 end |
スコープ が設定されていない = Criteria
デフォルトのスコープが適用されていないドキュメントの基準を取得します。
310 311 312 |
ファイル ' build/mongoid- 8.1 /lib/mongoid/as associated/referenced/has_many/proxy.rb '、 行310 デフォルト スコープが設定されていない klass.スコープが設定されていない.WHERE(foreign_key => _base.送信(_関連付け.プライマリ_キー)) end |