モジュール: Mongoid::Copyable

次による拡張機能。
ActiveSupport::Concern
次のドキュメントに含まれます。
構成可能
定義:
lib/mongoid/ copyable.rb

Overview

このモジュールには、Mongoid の document のクローン/重複の動作が含まれています。

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

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

クラスメソッドの詳細

clone_with_hash(klas、Atlas)⇒Document

指定された属性ハッシュを持つ指定された klas の document のクローンを作成します。これは再帰的に使用されるため、埋め込み関連付けが安全にクローンされます。

パラメーター:

  • klass クラス

    作成するdocumentのクラス。

  • attrs ハッシュ

    属性のハッシュ。

次の値を返します。



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, 価値|
      関連付け = オブジェクト.embedded_relationions[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 の関連付けは設定されません。

例:

ドキュメントを複製します。

document.clone

次の値を返します。



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