モジュール: Mongoid::関連付け::アクセス

次による拡張機能。
ActiveSupport::Concern
次のドキュメントに含まれます。
Mongoid::関連付け
定義:
lib/mongoid/asaction/accessors.rb

Overview

このモジュールには、 getter と setter を介した関連付けへのアクセスと、新しい関連付けを作成するためのビルダへの委任方法に関連するすべての動作が含まれています。

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

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

クラスメソッドの詳細

定義_ビルダ! (関連付け) ⇒ クラス

embeddeds_one 関連付けのビルダ メソッドを定義します。これは #Build_name として定義されます。

例:

Person.define_builder!(association)

パラメーター:

次の値を返します。

  • クラス

    設定されているクラス。



387
388
389
390
391
392
393
394
395
396
397
398
399
400
# ファイル 'lib/mongoid/asaction/accessors.rb' は、 387行

デフォルト 自己.定義_ビルダ。(関連付け)
  name = 関連付け.name
  関連付け.逆_クラス.タップ 行う |klass|
    klass.re_defined_method("build_#{name}") 行う |*args|
      属性, _options = parse_args(*args)
      ドキュメント = 工場.構築(関連付け.関係_クラス, 属性)
      _構築 行う
         = 送信(" #{ name } = ", ドキュメント)
        .run_colbacks(: build)
        
      end
    end
  end
end

refine_creator!(関連付け) ⇒ クラス

embeddeds_one 関連付けの作成メソッドを定義します。これは #create_name として定義されます。オブジェクトが構築された後、すぐに保存されます。

例:

Person.define_creator!(association)

パラメーター:

次の値を返します。

  • クラス

    設定されているクラス。



412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
# ファイル 'lib/mongoid/asaction/accessors.rb' は、 412行

デフォルト 自己.refine_creator.(関連付け)
  name = 関連付け.name
  関連付け.逆_クラス.タップ 行う |klass|
    klass.re_defined_method("create_#{name}") 行う |*args|
      属性, _options = parse_args(*args)
      ドキュメント = 工場.構築(関連付け.klass, 属性)
      doc = _assigning 行う
        送信(" #{ name } = ", ドキュメント)
      end
      doc.保存
      保存 場合 new_record? & & 関連付け.stored_foreign_key?
      doc
    end
  end
end

refine_existance_check。(関連付け) = クラス

関連付けの有無のチェックを追加します。

例:

有無のチェックを追加します。

Person.define_existence_check!(association)

関連付けが存在するかどうかを確認します。

person = Person.new
person.has_game?
person.game?

パラメーター:

次の値を返します。

  • クラス

    The model being set up.



277
278
279
280
281
282
283
284
285
286
287
# ファイル 'lib/mongoid/asaction/accessors.rb' は、 277行

デフォルト 自己.refine_existance_check。(関連付け)
  name = 関連付け.name
  関連付け.逆_クラス.タップ 行う |klass|
    klass.MongoDB_eval <<-END, __FILE__, __NET__ + 1
        デフォルト #{name}です。 Within#{name}).空白かどうか} の終了エイリアス :has_#{name}? :#{name}?
    END
  end
end

refine_getter!(関連付け) ⇒ クラス

関連付けの getter を定義します。ここでは何も特別ではありません。関連付けが存在する場合はそれのインスタンス変数を返すか、それを構築します。

例:

関連付けの getter を設定します。

Person.define_getter!(association)

パラメーター:

次の値を返します。

  • クラス

    設定されているクラス。



299
300
301
302
303
304
305
306
307
308
# ファイル 'lib/mongoid/asaction/accessors.rb' は、 299行

デフォルト 自己.refine_getter.(関連付け)
  name = 関連付け.name
  関連付け.逆_クラス.タップ 行う |klass|
    klass.re_defined_method(name) 行う |再読み込み = false|
      価値 = get_relation(name, 関連付け, nil, 再読み込み)
      価値 = 送信("build_#{name}") 場合 価値.nil? & & 関連付け.自動構築 & & !Within_自動ビルドではありませんか
      価値
    end
  end
end

refine_ids_getter!(関連付け) ⇒ クラス

関連付け内の document の ID の getter を定義します。参照された関連付けが多い場合にのみ指定する必要があります。

例:

関連付けの ID 取得を設定します。

Person.define_ids_getter!(association)

パラメーター:

次の値を返します。

  • クラス

    設定されているクラス。



319
320
321
322
323
324
325
326
# ファイル 'lib/mongoid/asaction/accessors.rb' は、 319行

デフォルト 自己.refine_ids_getter.(関連付け)
  ids_method = " #{ 関連付け  名前  to_s  単数形の } _ids "
  関連付け.逆_クラス.タップ 行う |klass|
    klass.re_defined_method(ids_method) 行う
      送信(関連付け.name).プル型(:_id)
    end
  end
end

refine_ids_setter!(関連付け) ⇒ オブジェクト

この関連付け内の document を ID 別に設定できる setter メソッドを定義します。定義されたセッターは、指定された ID を持つ document を検索し、見つかった document で通常の関連付けセットを呼び出します。ID セッターは、参照された多くの関連付けに対してのみ定義する必要があります。

@ param [ Mongoid::関連付け::Relatable ] associated 関連付けの関連付け。

@return [ Class ] 設定されるクラス。

例:

関連付けの id_setter を設定します。

Person.define_ids_setter!(association)


368
369
370
371
372
373
374
375
376
# ファイル 'lib/mongoid/asaction/accessors.rb' は、 368行

デフォルト 自己.refine_ids_setter.(関連付け)
  ids_method = "#{関連付け名前to_s単数形の }_ids="
  関連付け.逆_クラス.alased_ associateds[ids_method.調べます] = 関連付け.name.to_s
  関連付け.逆_クラス.タップ 行う |klass|
    klass.re_defined_method(ids_method) 行う |ids|
      送信(関連付け.setter, 関連付け.関係_クラス.find(ids.拒否(&:blank?)))
    end
  end
end

refine_setter!(関連付け) ⇒ クラス

関連付けのセッターを定義します。これは、いくつかの条件に基づいていくつかの処理を実行します。既存の関連付けがある場合は、ターゲット置換が行われます。そうでない場合は、指定されたターゲットとの新しい関連付けが作成されます。

例:

関連付けのセッターを設定します。

Person.define_setter!(association)

パラメーター:

次の値を返します。

  • クラス

    設定されているクラス。



339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
# ファイル 'lib/mongoid/asaction/accessors.rb' は、 339行

デフォルト 自己.define_setter!(関連付け)
  name = 関連付け.name
  関連付け.逆_クラス.タップ 行う |klass|
    klass.re_defined_method(" #{ name } = ") 行う |オブジェクト|
      Within_自動ビルド 行う
        場合 価値 = get_relation(name, 関連付け, オブジェクト)
          価値 = __Build__(name, 価値, 関連付け) ただし、 価値.respond_to?(: 置換)

          set_relation(name, 価値.replacement(オブジェクト.置換可能))
        else
          __Build__(name, オブジェクト.置換可能, 関連付け)
        end
      end
    end
  end
end

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

# __ build__ (name, object, concern, associated_fields = nil) = nil) = nil からプロキシ

関連するドキュメントを構築し、ドキュメントが nil でない限り関連付けを作成し、このドキュメントに関連付けを設定します。

例:

関連付けを構築します。

person.__build__(:addresses, { :_id => 1 }, association)

パラメーター:

  • name ( string | Symbol )

    関連付けの名前。

  • オブジェクト ハッシュ | BSON ::ObjectId

    使用する ID または属性。

  • 関連付け Mongoid::関連付け::Relatable

    関連付けメタデータ。

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

    # のみ を介して検索されたフィールド。 [選択した_フィールド] が指定されている場合、それにリストされていないフィールドは構築されたドキュメントでアクセスできなくなります。

次の値を返します。



25
26
27
28
# ファイル 'lib/mongoid/asaction/accessors.rb' は、 25行

デフォルト __Build__(name, オブジェクト, 関連付け, scheduled_fields = nil)
  関係 = create_relation(オブジェクト, 関連付け, scheduled_fields)
  set_relation(name, 関係)
end

# create_relation (オブジェクト、関連付け、選択した_フィールド = nil)= nil) ================================================

オブジェクトと関連付けメタデータから関連付けを作成します。

例:

関連付けを作成します。

person.create_relation(document, association)

パラメーター:

  • オブジェクト (Document | Array<Document>)

    関連付けターゲット。

  • 関連付け Mongoid::関連付け::Relatable

    関連付けメタデータ。

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

    # のみ を介して検索されたフィールド。 選択した_フィールドが指定されている場合、それにリストされていないフィールドは、作成された関連付けドキュメントではアクセスできなくなります。

次の値を返します。



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# ファイル 'lib/mongoid/asaction/accessors.rb' は、 42行

デフォルト create_relation(オブジェクト, 関連付け, scheduled_fields = nil)
  キー = @attributes[関連付け.inverse_type]
  タイプ = キー ? 関連付け.リゾルバ.model_for(キー) : nil
  ターゲット = 場合 t = 関連付け.構築(自己, オブジェクト, タイプ, scheduled_fields)
             関連付け.create_relation(自己, t)
           end

  埋め込み関連付けではこれを実行する必要があります。 保留中のコールバック
  # はドキュメントをマテリアライズド化するときにのみ追加されます。これは次のみ発生します:
  埋め込み関連付けの場合は #。 にはデータベースへの呼び出しはありません。
  参照された関連付けの#構築。
  場合 関連付け.埋め込み
    配列(ターゲット). 行う |doc|
      doc.試す(:run_pending_colbacks)
    end
  end

  ターゲット
end

# restore_relation_criteria (name) =オブジェクト

関連付けプロキシ内の基準をリセットします。 基礎となる ID 配列を同期するために多対多の関連付けで使用されます。

例:

関連付け基準をリセットします。

person.reset_relation_criteria(:preferences)

パラメーター:

  • name シンボル

    関連付けの名前。



69
70
71
72
73
# ファイル 'lib/mongoid/asaction/accessors.rb' は、 69行

デフォルト delete_relation_criteria(name)
  return ただし、 instance_variable_defined?(" @_ #{ name } ")

  送信(name).delete_unloaded
end

# set_relation (名前, 関係)=プロキシ

指定された名前を持つクラスの変数インスタンスに、指定された関連付けを設定します。 コードのクリーンアップのためだけにヘルパーとして使用されます。

例:

ドキュメントにプロキシを設定します。

person.set(:addresses, addresses)

パラメーター:

  • name ( string | Symbol )

    関連付けの名前。

  • 関係 プロキシ

    設定する関連付け。

次の値を返します。



85
86
87
# ファイル 'lib/mongoid/asaction/accessors.rb' は、 85行

デフォルト set_relation(name, 関係)
  instance_variable_set(" @_ #{ name } ", 関係)
end