모듈: Mongoid::Persistable::Settable

확장자:
ActiveSupport::Concern
포함 항목:
Mongoid::Persistable
다음에 정의됨:
lib/mongoid/persistable/settable.rb

개요

$ 설정하다 작업에 대한 동작을 정의합니다.

인스턴스 메서드 요약 접기

인스턴스 메서드 세부 정보

#설정하다(setters) ⇒ 문서

제공된 필드 /값 쌍에 대해 $ 설정하다 작업을 수행하고 메모리에 있는 문서 의 값을 설정하다 합니다.

키는 점으로 구성된 키 시퀀스일 수 있으며, 이 경우 최상위 필드는 중첩된 해시로 처리되고 누락된 키가 자동으로 생성됩니다.

이와 같이 중첩 설정하다 를 수행하면 중간 키의 값이 병합됩니다.

최상위 필드 가 해시가 아닌 경우 원래 값은 삭제되고 필드 가 해시로 대체됩니다.

MongoDB의 $ 설정하다 와 달리 Mongoid의 설정하다 는 중첩 해시 시맨틱을 통해 필드 의 하위 집합을 설정하는 경우에도 전체 필드 를 기록합니다. 즉, 중첩된 해시 시맨틱을 사용하여 $ 설정하다 를 수행하면 데이터베이스 의 최상위 필드 에 있는 다른 해시 키를 덮어쓸 수 있습니다.

예시:

값을 설정합니다.

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/persistable/settable.rb', 줄 48

def 세트(세터)
  prepare_atomic_operation do |ops|
    process_atomic_operations(세터) do |필드, value|

      field_seq = 필드.to_s.split('.')
      필드 = field_seq.shift
      만약 field_seq.분량 > 0
        # 중첩된 해시 경로
        old_value = 속성[필드]

        # 이전 값이 해시가 아닌 경우 클로버합니다.
        하지 않는 한 해시 === old_value
          old_value = {}
        end

        # 해시로 내려가 필요에 따라 중간 키를 생성합니다.
        cur_value = old_value
        동안 field_seq.분량 > 1
          cur_key = field_seq.shift
          # 유형이 해시가 아닌 경우 각 수준에서 clobber
          하지 않는 한 해시 === cur_value[cur_key]
            cur_value[cur_key] = {}
          end
          cur_value = cur_value[cur_key]
        end

        # 이제 리프 레벨에 있으므로 설정하다 를 수행합니다.
        # 이전에 이 수준에 있던 내용을 덮어씁니다.
        cur_value[field_seq.shift] = value

        # 값을 최상위 필드 의 값으로 설정하다 합니다.
        # 이것이 $ 설정하다 에 전달되는 것이기 때문입니다.
        value = old_value
      end

      process_attribute(필드, value)

      하지 않는 한 관계.포함?(필드.to_s)
        ops[atomic_attribute_name(필드)] = 속성[필드]
      end
    end
    { "$set" => ops } 하지 않는 한 ops.비어 있나요?
  end
end