モジュール: Mongoid::Persistable::Setable

次による拡張機能。
ActiveSupport::Concern
次のドキュメントに含まれます。
Mongoid::Persistable
定義:
lib/mongoid/persistable/settable.rb

Overview

$set 操作の動作を定義します。

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

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

#セット(セッター) = ドキュメント =ドキュメント

指定されたフィールドと値のペアに対して $set 操作を実行し、メモリ内のドキュメントに値を設定します。

キーは、ドットを含むキーのシーケンスにすることができます。その場合、最上位のフィールドはネストされたハッシュとして扱われ、欠落しているキーは自動的に作成されます。

このようにネストされたセットを実行すると、中間キーの値がマージされます。

最上位のフィールドがハッシュでない場合、その元の値は破棄され、フィールドはハッシュに置き換えられます。

MongoDB の $set と違い、Mongoid の セットは、ネストされたハッシュ セマンティクスで フィールドのサブセットを設定する場合でも、 フィールド全体を書込むことに注意してください。 つまり、ネストされたハッシュ セマンティクスで $set を実行すると、データベースの最上位フィールド内の他のハッシュ キーが上書きされます。

例:

値を設定します。

document.set(title: "sir", dob: Date.new(1970, 1, 1))

ネストされたハッシュ セマンティクスを使用して値を設定します。

document.set('author.title' => 'Sir')
# => document.author == {'title' => 'Sir'}

ネストされたハッシュ値のマージ。

document.set('author.title' => 'Sir')
document.set('author.name' => 'Linus Torvalds')
# => document.author == {'title' => 'Sir', 'name' => 'Linus Torvalds'}

ネストされたハッシュがハッシュ以外の値を上書きします。

document.set('author' => 'John Doe')
document.set('author.title' => 'Sir')
# => document.author == {'title' => 'Sir'}

パラメーター:

  • セッター ハッシュ

    設定するフィールドと値のペア。

次の値を返します。



48
49
50
51
52
53
54
55
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
90
91
# ファイル 'lib/mongoid/永続的/settable.rb' 行48

デフォルト セット(セッター)
  準備_アトミック_操作 行う |ops|
    Process_アトミック_操作(セッター) 行う |フィールド, 価値|

      field_Seq = フィールド.to_s.分裂('.')
      フィールド = field_Seq.シフト
      場合 field_Seq.Length > 0
        ネストされたハッシュ パス
        old_value = 属性[フィールド]

        # 古い値がハッシュでない場合は、それを閉じます
        ただし、 ハッシュ === old_value
          old_value = {}
        end

        必要に応じて中間キーを作成して、ハッシュに降順
        cursor_value = old_value
        一方 field_Seq.Length > 1
          cursor_key = field_Seq.シフト
          タイプがハッシュでない場合は、各レベルで が必要になります
          ただし、 ハッシュ === cursor_value[cursor_key]
            cursor_value[cursor_key] = {}
          end
          cursor_value = cursor_value[cursor_key]
        end

        #現在、リーフレベルでは、セットを実行します
        # と は、以前はこのレベルにあったものを上書きします。
        cursor_value[field_Seq.シフト] = 価値

        # と の値を最上位レベルのフィールドの値に設定します
        # これは $set に渡す値であるため
        価値 = old_value
      end

      process_attribute(フィールド, 価値)

      ただし、 関係.include?(フィールド.to_s)
        ops[アトミック_attribute_name(フィールド)] = 属性[フィールド]
      end
    end
    { " $set " => ops } ただし、 ops.空の場合
  end
end