모듈: Mongoid::Persistable::Settable
- 확장자:
- ActiveSupport::Concern
- 포함 항목:
- Mongoid::Persistable
- 다음에 정의됨:
- lib/mongoid/persistable/settable.rb
개요
$ 설정하다 작업에 대한 동작을 정의합니다.
인스턴스 메서드 요약 접기
-
#설정하다(setters) ⇒ 문서
제공된 필드 /값 쌍에 대해 $ 설정하다 작업을 수행하고 메모리에 있는 문서 의 값을 설정하다 합니다.
인스턴스 메서드 세부 정보
#설정하다(setters) ⇒ 문서
제공된 필드 /값 쌍에 대해 $ 설정하다 작업을 수행하고 메모리에 있는 문서 의 값을 설정하다 합니다.
키는 점으로 구성된 키 시퀀스일 수 있으며, 이 경우 최상위 필드는 중첩된 해시로 처리되고 누락된 키가 자동으로 생성됩니다.
이와 같이 중첩 설정하다 를 수행하면 중간 키의 값이 병합됩니다.
최상위 필드 가 해시가 아닌 경우 원래 값은 삭제되고 필드 가 해시로 대체됩니다.
MongoDB의 $ 설정하다 와 달리 Mongoid의 설정하다 는 중첩 해시 시맨틱을 통해 필드 의 하위 집합을 설정하는 경우에도 전체 필드 를 기록합니다. 즉, 중첩된 해시 시맨틱을 사용하여 $ 설정하다 를 수행하면 데이터베이스 의 최상위 필드 에 있는 다른 해시 키를 덮어쓸 수 있습니다.
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 |