モジュール: Mongoid::Copyable
Overview
このモジュールには、Mongoid の document のクローン/重複の動作が含まれています。
クラスメソッドの概要を折りたたむ
-
.clone_with_hash(klass, attrs) ⇒ Document
指定された属性ハッシュを持つ指定された klas の document のクローンを作成します。
インスタンス メソッドの概要を折りたたむ
-
# clone = ドキュメント(また: #dup)
現在の
Documentを複製または重複化します。
クラスメソッドの詳細
。clone_with_hash(klas、Atlas)⇒Document
指定された属性ハッシュを持つ指定された klas の document のクローンを作成します。これは再帰的に使用されるため、埋め込み関連付けが安全にクローンされます。
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# ファイル 'lib/mongoid/ copyable.rb', 行42 デフォルト 自己.clone_with_hash(klass, attrs) logical_attrs = {} _attribute_names = klass.Atlas App Services attrs.拒否します。 行う |attr_name, 価値| ただし、 _attribute_names.include?(attr_name) logical_attrs[attr_name] = 価値 true end end 工場.構築(klass, attrs).タップ 行う |オブジェクト| logical_attrs.各 行う |attr_name, 価値| 関連付け = オブジェクト.[attr_name] 場合 関連付け&.1 つ? & & 価値.is_a?(ハッシュ) オブジェクト.送信(" #{attr_name } = ", clone_with_hash(関連付け.klass, 価値)) elsif 関連付け&.多いです & & 価値.is_a?(配列) docs = 価値.map { |h| clone_with_hash(関連付け.klass, h) } オブジェクト.送信(" #{attr_name } = ", docs) elsif オブジェクト.respond_to?(" #{attr_name } = ") オブジェクト.送信(" #{attr_name } = ", 価値) else オブジェクト.属性[attr_name] = 価値 end end end end |
インスタンス メソッドの詳細
# clone =ドキュメント(別名: dup
現在の Document を複製または重複化します。これにより、document の ID を除くすべての属性が返され、すべてのインスタンス変数がリセットされます。
このクローンには埋め込みドキュメントも含まれます。埋め込みドキュメントに _idフィールドがある場合は、ルートの _id とは異なり、このフィールドが保持されます。
埋め込み子をクローンする場合、埋め込み親はクローンされず、 embedded_in の関連付けは設定されません。
22 23 24 25 26 27 28 29 |
# ファイル 'lib/mongoid/ copyable.rb', 行22 デフォルト 複製 # 2704次の行はここにあります [] に対処します。 ドキュメント内の _id と ID フィールドは Mongoid で問題が発生します 他の場所では #。 これは、必要な場合にのみルート ドキュメントでのみ実行されることに注意してください。 埋め込みドキュメントで同じ _id を維持するには、 を使用します。 attrs = clone_document.次の項目を除く(*自己.クラス.id_fields) コピー可能.clone_with_hash(自己.クラス, attrs) end |