クラス: Mongoid::関連付け::参照::HasMany::Proxy

継承:
  • オブジェクト
すべて表示
次による拡張機能。
転送可能
定義:
build/mongoid- 8.1 /lib/mongoid/asaction/referenced/has_many/proxy.rb

Overview

このクラスは、異なるコレクション内のドキュメント間で 1 対多であるすべての関連付けの動作を定義します。

既知のサブクラスを直接確認

Mongoid::関連付け::参照::HasAndBelongsToMany::Proxy

インスタンス属性の概要

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

#_association, #_base, #_target

クラスメソッドの概要を折りたたむ

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

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

#空白?#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#置換可能

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

#merger_dump#merger_load

コンストラクターの詳細

初期化(ベース、ターゲット、関連付け)=プロキシ

新しい references_many の関連付けをインスタンス化します。 逆オブジェクトに外部キーとベースを設定します。

例:

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

Referenced::Many.new(base, target, association)

パラメーター:

  • ベース ドキュメント

    この関連付けがハングするドキュメント。

  • ターゲット 配列 <ドキュメント>

    関連付けのターゲット。

  • 関連付け 関連付け

    関連付けメタデータ。



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

動的メソッド処理

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

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

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

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

パラメーター:

  • name シンボル | string

    メソッドの名前。

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

    メソッド引数

  • ブロック Proc

    渡す任意のブロック。

次の値を返します。

  • 条件| オブジェクト

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



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 です。

例:

この関連付けは埋め込まれていますか。

Referenced::Many.embedded?

次の値を返します。

  • false

    常に false です。



547
548
549
ファイル ' build/mongoid- 8.1 /lib/mongoid/as associated/referenced/has_many/proxy.rb '、 行547

デフォルト 埋め込み
  false
end

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

# を プッシュ する

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

例:

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

person.posts << post

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

person.posts.push(post)

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

person.posts.concat([ post_one, post_two ])

パラメーター:

次の値を返します。



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

属性から新しいドキュメントを作成し、保存せずにこの関連付けに追加します。

例:

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

person.posts.build(:title => "A new post")

パラメーター:

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

    新しいドキュメントの 属性。

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

    構築する任意のサブクラス。

結果:

  • ドキュメント

次の値を返します。



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 つずつ保持するのではなく、バッチ挿入を実行します。

例:

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

person.posts.concat([ post_one, post_two ])

パラメーター:

次の値を返します。



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.

例:

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

person.posts.delete(post)

パラメーター:

次の値を返します。



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) =整数

指定された条件に従って、関連するすべてのドキュメントをデータベースから削除します。

例:

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

person.posts.delete_all

関連付けられているすべてのドキュメントを条件付きで削除します。

person.posts.delete_all({ :title => "Testing" })

パラメーター:

  • 条件 ハッシュ (デフォルトは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) =整数

指定された条件に従って、関連するすべてのドキュメントをデータベースから破棄します。

例:

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

person.posts.destroy_all

関連付け内のすべてのドキュメントを条件付きで破棄します。

person.posts.destroy_all({ :title => "Testing" })

パラメーター:

  • 条件 ハッシュ (デフォルトは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

=配列 <ドキュメント>

注:

これにより、関連付け全体がメモリに読み込まれます。

関連付け内の各ドキュメントを反復処理し、指定された ブロックに生成します。

例:

ドキュメントを反復処理します。

person.posts.each do |post|
  post.save
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 を返します。

このメソッドは、関連付けがすでにメモリにロードされている場合でも、呼び出しごとにデータベースをクエリします。

例:

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

person.posts.exists?

次の値を返します。

  • true | false

    永続化されたドキュメントが存在する場合は true であり、存在しない場合は 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 オブジェクトによって見つかったドキュメントのうちの最初のドキュメントが返されます。

例:

ID で検索します。

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

複数の ID で検索します。

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

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

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

パラメーター:

  • *args [ オブジェクト | 配列 <Object> ]...

    ID。

  • ブロック Proc

    渡す任意のブロック。

次の値を返します。

  • (Document | Array<Document> | nil)

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



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

外部キーと参照を削除して、ベース ドキュメントとターゲット ドキュメント間のすべての関連付けを削除し、プロセス内のターゲット ドキュメントを孤立します。

例:

関連付けを null にします。

person.posts.nullify


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 からドキュメントが削除されます。

例:

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

person.posts.clear

次の値を返します。

  • が多い

    関連付けが空でした。



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 の場合は、必要な削除を実行します。

例:

関連付けを置き換えます。

person.posts.substitute([ new_post ])

パラメーター:

次の値を返します。



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

デフォルトのスコープが適用されていないドキュメントの基準を取得します。

例:

スコープが設定されていない条件を取得します。

person.posts.unscoped

次の値を返します。

  • 基準

    スコープが設定されていない基準。



310
311
312
ファイル ' build/mongoid- 8.1 /lib/mongoid/as associated/referenced/has_many/proxy.rb '、 行310

デフォルト スコープが設定されていない
  klass.スコープが設定されていない.WHERE(foreign_key => _base.送信(_関連付け.プライマリ_キー))
end