モジュール: 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'}

パラメーター:

  • セッター (ハッシュ) —

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

次の値を返します。



46
47
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
# ファイル 'lib/mongoid/永続的/settable.rb' 行46

デフォルト セット(セッター)
  準備_アトミック_操作 行う |ops|
    Process_アトミック_操作(セッター) 行う |フィールド, 価値|
      field_Seq = フィールド.to_s.分裂('.')
      フィールド = field_Seq.シフト
      場合 field_Seq.Length > 0
        ネストされたハッシュ パス
        old_value = 属性[フィールド]

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

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

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

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

      process_attribute(フィールド, 価値)

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