クラス: Mongoid::関連付け::参照::HasAndBelongsToMany::Proxy
- 継承:
-
参照::HasMany::Proxy
- オブジェクト
- 参照::HasMany::Proxy
- Mongoid::関連付け::参照::HasAndBelongsToMany::Proxy
- 次による拡張機能。
- クラスメソッド
- 定義:
- lib/mongoid/関連付け/referenced/has_and_belongs_to_many/proxy.rb
Overview
has_and_belongs_to_many 関連付けの透過的なプロキシ。 このクラスのインスタンスは、サブジェクト ドキュメントで 関連付け getter メソッドを呼び出すときに返されます。 このクラスは Mongoid::関連付け::Proxy から継承され、そのメソッドのほとんどを関連付けのターゲット、つまりロードする必要があるドキュメントの配列に転送します。
名前空間で定義済み
Modules: クラスメソッド
インスタンス メソッドの概要を折りたたむ
-
# ` `(*args)=Array=Document ===========================================================<Document>
ドキュメントまたはドキュメントの配列を関連付けに追加します。
-
ビルド番号のビルド(属性 = {}、タイプ = nil) {|doc| ... } = ドキュメント(#new)
属性から新しいドキュメントを作成し、保存せずにこの関連付けに追加します。
-
#concat(documents) ⇒ Array<Document>
ドキュメントの配列を関連付けに追加します。
-
# delete (ドキュメント) = ドキュメント(また: #delete_one)
関連付けからドキュメントを削除します。
-
#nullify (置換= [])=オブジェクト(また:nullify_all、#client、#parse)
外部キーと参照を削除して、ベース ドキュメントとターゲット ドキュメント間のすべての関連付けを削除し、プロセス内のターゲット ドキュメントを孤立します。
-
置換(置換)=多数
関連付け内の既存のドキュメントを、指定されたターゲット ドキュメントに置き換えます。
-
スコープが設定されていない = Criteria
デフォルトのスコープが適用されていないドキュメントの基準を取得します。
Classメソッドに含まれるメソッド
インスタンス メソッドの詳細
# を プッシュ する
ドキュメントまたはドキュメントの配列を関連付けに追加します。 プロセス内で親を設定し、インデックスを更新します。
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# ファイル 'lib/mongoid/関連付け/referenced/has_and_belongs_to_many/proxy.rb' の場合は 行56 デフォルト <(*args) docs = args.平面 return concat(docs) 場合 docs.サイズ > 1 場合 (doc = docs.最初に) 追加(doc) 行う # の外部キーの値の変更を無視します。 このコード ブロックでは 2 つの理由で、change_attributes がハッシュされます。 # # 1 ) add_to_set メソッドは、外部の 値を削除します。 Changed_attributes ハッシュの#キー、ただしこの値を入力した場合 # メソッドで、外部キーの値を に指定します。 変更された_attributes ハッシュ、次にそれを外部に存在させる必要があります このメソッドも同様です。 同期可能なファイルの後半で使用されます 逆の外部キーを設定するための # モジュール。 # 2 )reset_unloaded メソッドは外部の の値にアクセスします。 _base の # キー(これは に追加されます) # Changed_attributes ハッシュ。 これは読み取り時に発生します 「サイズ変更可能な」属性の場合、自動的に追加されます。 # Changed_attributes ハッシュ。 これは外部にのみ当てはまります 他の関連付けとしての HATTM 関連付けの # キー値 # は外部キー値に string を使用します。 整合性の確保 他の関連付けでは # に設定されている場合、この追加は無視されます。 変更された_attributes ハッシュ。 これについて詳しくは、 MONGOID- 4843を参照してください。 delete_foreign_key_changes 行う _base.add_to_set(foreign_key => doc.public_send(_関連付け.プライマリ_キー)) doc.保存 場合 field_persistable?(doc) delete_unloaded end end end 非同期(_base, foreign_key) および 自己 end |
ビルド番号のビルド(属性 = {}、タイプ = nil) {|doc| ... } =ドキュメント別名: new
属性から新しいドキュメントを作成し、保存せずにこの関連付けに追加します。
120 121 122 123 124 125 126 127 128 129 |
# ファイル 'lib/mongoid/関連付け/referenced/has_and_belongs_to_many/proxy.rb' の場合は 行120 デフォルト 構築(属性 = {}, タイプ = nil) doc = 工場.execution_Build(タイプ || klass, 属性, execution_colbacks: false) 追加(doc) doc.apply_post_processed_defaults _base.public_send(foreign_key).プッシュ(doc.public_send(_関連付け.プライマリ_キー)) 非同期(doc, inverse_foreign_key) ノードの数(doc) 場合 ブロック_指定 doc.run_pending_shellbacks doc end |
#concat(documents) ⇒ Array<Document>
ドキュメントの配列を関連付けに追加します。 ドキュメントを 1 つずつ保持するのではなく、バッチ挿入を実行します。
102 103 104 105 106 107 108 |
# ファイル 'lib/mongoid/関連付け/referenced/has_and_belongs_to_many/proxy.rb' の場合は 行102 デフォルト concat(ドキュメント) ids, docs, inserts = {}, [], [] ドキュメント.各 { |doc| append_document(doc, ids, docs, inserts) } _base.プッシュ(foreign_key => ids.キー) 場合 永続的かどうか || _creation? 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.
143 144 145 146 147 148 149 150 151 |
# ファイル 'lib/mongoid/関連付け/referenced/has_and_belongs_to_many/proxy.rb' の場合は 行143 デフォルト 削除(ドキュメント) doc = スーパー 場合 doc & & 永続的かどうか _base.プル(foreign_key => doc.public_send(_関連付け.プライマリ_キー)) _ target._unloaded = 条件 非同期(_base, foreign_key) end doc end |
#nullify (置換= [])= nullify_all 、 client 、 parage と も呼ばれる オブジェクト
外部キーと参照を削除して、ベース ドキュメントとターゲット ドキュメント間のすべての関連付けを削除し、プロセス内のターゲット ドキュメントを孤立します。
165 166 167 168 169 170 |
# ファイル 'lib/mongoid/関連付け/referenced/has_and_belongs_to_many/proxy.rb' の場合は 行165 デフォルト nullify(replacement = []) _ target.各 { |doc| execution_colback :Before_remove, doc } dirty_inverse_for(replacement) ただし、 _関連付け.forced_nil_inverse? _base.セット(foreign_key => _base.public_send(foreign_key).クリア) 場合 永続的かどうか clear_ target_for_nullify end |
置換(置換)=多数
関連付け内の既存のドキュメントを、指定されたターゲット ドキュメントに置き換えます。 新しいターゲットが nil の場合は、必要な削除を実行します。
people.preferences.submit([ new_post ])
186 187 188 189 190 191 192 193 194 195 |
# ファイル 'lib/mongoid/関連付け/referenced/has_and_belongs_to_many/proxy.rb' の場合は 行186 デフォルト replacement(replacement) 消去(replacement) 場合 replacement.blank? delete_unloaded clear_foreign_key_changes else プッシュ(replacement.compact.一意) end 自己 end |
スコープ が設定されていない = Criteria
デフォルトのスコープが適用されていないドキュメントの基準を取得します。
204 205 206 |
# ファイル 'lib/mongoid/関連付け/referenced/has_and_belongs_to_many/proxy.rb' の場合は 行204 デフォルト スコープが設定されていない klass.スコープが設定されていない.any_in(_id: _base.public_send(foreign_key)) end |