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

継承:
  • オブジェクト
すべて表示
次による拡張機能。
転送可能、クラスメソッド
定義:
lib/mongoid/関連付け/referenced/has_many/proxy.rb

Overview

has_many の関連付けの対象となるプロキシ。 このクラスのインスタンスは、サブジェクト ドキュメントで 関連付け getter メソッドを呼び出すときに返されます。 このクラスは Mongoid::関連付け::Proxy から継承され、そのメソッドのほとんどを関連付けのターゲット、つまりロードする必要があるドキュメントの配列に転送します。

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

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

名前空間で定義済み

Modules: クラスメソッド

定数の概要

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

プロキシ::KEEP

インスタンス属性の概要

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

#_association, #_base, #_target

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

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

fast_loader埋め込み

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

#空白?#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

コンストラクターの詳細

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

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

例:

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

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

パラメーター:



51
52
53
54
55
56
# ファイル 'lib/mongoid/関連付け/referenced/has_many/proxy.rb' の検索行は51です。

デフォルト 初期化(ベース, ターゲット, 関連付け)
  列挙 = HasMany::Enumerable.新着情報(ターゲット, ベース, 関連付け)
  スーパー(ベース, 列挙, 関連付け) 行う
    MongoDB_ENUS_JAJP 場合 klass.埋め込み & & !klass.定期的か
  end
end

動的メソッド処理

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

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

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

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

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

anywhere we define method_missing.

rust : を無効化します。

パラメーター:

  • name シンボル | string

    メソッドの名前。

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

    メソッド引数

  • & ブロック

    渡す任意のブロック。

次の値を返します。

  • 条件| オブジェクト

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



468
469
470
471
472
473
474
475
476
# ファイル 'lib/mongoid/関連付け/referenced/has_many/proxy.rb' の検索行は468です。

ruby2_keywords デフォルト メソッド_欠落(name, *args, &ブロック)
  場合 _ target.respond_to?(name)
    _ target.送信(name, *args, &ブロック)
  else
    klass.送信(:with_scope, 条件) 行う
      条件.public_send(name, *args, &ブロック)
    end
  end
end

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

# を プッシュ する

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

例:

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

person.posts << post

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

person.posts.push(post)

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

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

パラメーター:

次の値を返します。



73
74
75
76
77
78
79
80
81
82
# ファイル 'lib/mongoid/関連付け/referenced/has_many/proxy.rb' の検索行は73です。

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

  場合 (doc = docs.最初に)
    追加(doc)
    doc.保存 場合 永続的かどうか & & !_assigning? & & !doc.検証されていますか?
  end
  自己
end

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

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

例:

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

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

パラメーター:

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

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

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

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

次の値を返します。



118
119
120
121
122
123
124
125
126
# ファイル 'lib/mongoid/関連付け/referenced/has_many/proxy.rb' の検索行は118です。

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

#concat(documents) ⇒ Array<Document>

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

例:

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

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

パラメーター:

次の値を返します。



95
96
97
98
99
100
101
102
103
104
105
106
# ファイル 'lib/mongoid/関連付け/referenced/has_many/proxy.rb' の検索行は95です。

デフォルト 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)

パラメーター:

次の値を返します。



140
141
142
143
144
145
146
147
148
149
150
151
# ファイル 'lib/mongoid/関連付け/referenced/has_many/proxy.rb' の検索行は140です。

デフォルト 削除(ドキュメント)
  execution_colbacks_round(:remove, ドキュメント) 行う
    結果 = _ target.削除(ドキュメント) 行う |doc|
      場合 doc
        unbind_one(doc)
        cascade!(doc) ただし、 _assigning?
      end
    end

    結果.タップ { delete_unloaded }
  end
end

# delete_all (条件 = nil) =整数

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

例:

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

person.posts.delete_all

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

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

パラメーター:

  • 条件 ハッシュ (デフォルトはnil

    削除する任意の条件。

次の値を返します。

  • (整数)

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



169
170
171
# ファイル 'lib/mongoid/関連付け/referenced/has_many/proxy.rb' の検索行は169です。

デフォルト delete_all(条件 = nil)
  delete_all(条件, :delete_all)
end

# delete_all (条件 = nil) =整数

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

例:

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

person.posts.destroy_all

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

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

パラメーター:

  • 条件 ハッシュ (デフォルトはnil

    破棄するための任意の条件。

次の値を返します。

  • (整数)

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



185
186
187
# ファイル 'lib/mongoid/関連付け/referenced/has_many/proxy.rb' の検索行は185です。

デフォルト delete_all(条件 = nil)
  delete_all(条件, :detry_all)
end

# ( & ブロック) =配列 <ドキュメント>

注:

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

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

例:

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

person.posts.each do |post|
  post.save
end

次の値を返します。



200
201
202
203
204
205
206
# ファイル 'lib/mongoid/関連付け/referenced/has_many/proxy.rb' の検索行は200です。

デフォルト (&ブロック)
  場合 ブロック
    _ target.(&ブロック)
  else
    to_enum
  end
end

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

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

関連付けにドキュメントが含まれているが、すべてのドキュメントがアプリケーション内にのみ存在する場合、つまりデータベースに永続化されていない場合、このメソッドは false を返します。

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

例:

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

person.posts.exists?

パラメーター:

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

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

次の値を返します。

  • true | false

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



230
231
232
# ファイル 'lib/mongoid/関連付け/referenced/has_many/proxy.rb' の検索行は230です。

デフォルト 存在するかどうか(id_or_条件 = :none)
  条件.存在するかどうか(id_or_条件)
end

#find(*args) {|Object| ... } ⇒ 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。

  • & ブロック

    渡す任意のブロック。

結果:

  • オブジェクト

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

次の値を返します。

  • (Document | Array<Document> | nil)

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



265
266
267
268
269
# ファイル 'lib/mongoid/関連付け/referenced/has_many/proxy.rb' の検索行は265です。

デフォルト find(*args, &ブロック)
  一致する = 条件.find(*args, &ブロック)
  配列(一致する). { |doc| _ target.プッシュ(doc) }
  一致する
end

# nullify =オブジェクトとも呼ばれます: nullify_all

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

例:

関連付けを null にします。

person.posts.nullify


277
278
279
280
281
282
283
# ファイル 'lib/mongoid/関連付け/referenced/has_many/proxy.rb' の検索行は277です。

デフォルト nullify
  条件.update_all(foreign_key => nil)
  _ target.クリア 行う |doc|
    unbind_one(doc)
    doc.Changed_attributes.削除(foreign_key)
  end
end

複数 の または クリア

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

例:

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

person.posts.clear

次の値を返します。

  • が多い

    関連付けが空でした。



294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
# ファイル 'lib/mongoid/関連付け/referenced/has_many/proxy.rb' の検索行は294です。

デフォルト 消去
  return nullify ただし、 _関連付け.破壊的か?

  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

置換(置換)=多数

関連付け内の既存のドキュメントを、指定されたターゲット ドキュメントに置き換えます。 新しいターゲットが nil の場合は、必要な削除を実行します。

例:

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

person.posts.substitute([ new_post ])

パラメーター:

次の値を返します。



327
328
329
330
331
332
333
334
335
336
337
338
339
340
# ファイル 'lib/mongoid/関連付け/referenced/has_many/proxy.rb' の検索行は327です。

デフォルト replacement(replacement)
  場合 replacement
    new_docs, docs = replacement.compact, []
    new_ids = new_docs.map(&:_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

次の値を返します。

  • 基準

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



349
350
351
# ファイル 'lib/mongoid/関連付け/referenced/has_many/proxy.rb' の検索行は349です。

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