모듈: Mongoid::Attributes

확장자:
ActiveSupport::Concern
다음을 포함합니다.
중첩, 처리, 읽기 전용
포함 항목:
컴포저블
다음에 정의됨:
lib/mongoid/attributes.rb,
lib/mongoid/attributes/nested.rb,
lib/mongoid/attributes/dynamic.rb,
lib/mongoid/attributes/embedded.rb,
lib/mongoid/attributes/readonly.rb,
lib/mongoid/attributes/projector.rb,
lib/mongoid/attributes/ 처리.rb

개요

이 모듈에는 내부 속성 해시를 처리하기 위한 로직과 값을 가져오고 설정하다 하는 방법이 포함되어 있습니다.

네임스페이스 아래에 정의됨

모듈: ClassMethods, Dynamic, Embedded, 중첩, Processing, 읽기 전용 클래스: 프로젝터

인스턴스 속성 요약 접기

인스턴스 메서드 요약 접기

읽기 전용에 포함된 메서드

#attribute_writeable?

Processing에 포함된 메서드

#process_attributes

인스턴스 속성 세부 정보

#attributes객체 (읽기 전용) 라고도 함: raw_attributes

속성 속성의 값을 반환합니다.



22
23
24
# 파일 'lib/mongoid/attributes.rb', 줄 22

def 속성
  @attributes
end

인스턴스 메서드 세부 정보

#Assign_attributes(attrs = nil) ⇒ 객체

:as 옵션을 사용하여 속성 이름(열 이름과 다시 일치) 및 역할 이름과 일치하는 키가 있는 속성 해시를 전달하여 특정 대량 할당 보안 역할의 모든 속성을 설정할 수 있습니다. 대량 할당 보안을 우회하려면 :without_ protection => true 옵션을 사용할 수 있습니다.

예시:

속성을 할당합니다.

person.assign_attributes(:title => "Mr.")

속성을 할당합니다( 역할 포함).

person.assign_attributes({ :title => "Mr." }, :as => :admin)

매개변수:

  • attrs (해시) (기본값: nil)

    설정하다 새 속성입니다.



218
219
220
221
222
# 파일 'lib/mongoid/attributes.rb', 줄 218

def Assign_attributes(attrs = nil)
  _assigning do
    process_attributes(attrs)
  end
end

#attribute_missing?(name) ⇒ true | false

누락된 필드가 있는 데이터베이스 에서 속성을 로드하여 문서 에서 속성이 누락되었는지 확인합니다.

예시:

속성이 누락되었나요?

document.attribute_missing?("test")

매개변수:

  • 이름 (string)

    속성의 이름입니다.

반환합니다:

  • (true | false)

    속성이 누락된 경우.



249
250
251
# 파일 'lib/mongoid/attributes.rb', 줄 249

def attribute_missing?(이름)
  !프로젝터.신규(__selected_fields).attribute_or_path_allowed?(이름)
end

#attribute_present?(name) ⇒ true | false

속성이 있는지 확인합니다.

예시:

속성이 존재합니까?

person.attribute_present?("title")

매개변수:

  • 이름 (string | 기호)

    속성의 이름입니다.

반환합니다:

  • (true | false)

    있으면 참, 없으면 거짓입니다.



33
34
35
36
37
38
# 파일 'lib/mongoid/attributes.rb', 줄 33

def attribute_present?(이름)
  속성 = read_raw_attribute(이름)
  !속성.비어 있나요? || 속성 == 거짓
구출 몽고이드::오류::AttributeNotLoaded
  거짓
end

#attributes_before_type_cast해시

캐스팅되지 않은 속성을 가져옵니다.

예시:

유형 캐스트 전에 속성을 가져옵니다.

document.attributes_before_type_cast

반환합니다:

  • (해시)

    캐스팅되지 않은 속성입니다.



46
47
48
# 파일 'lib/mongoid/attributes.rb', 줄 46

def attributes_before_type_cast
  @attributes_before_type_cast ||= {}
end

#has_attribute?(name) ⇒ true | false

문서 에 제공된 속성이 있나요?

예시:

문서에 속성이 있나요?

model.has_attribute?(:name)

매개변수:

  • 이름 (string | 기호)

    속성의 이름입니다.

반환합니다:

  • (true | false)

    키가 속성에 존재하는 경우.



58
59
60
# 파일 'lib/mongoid/attributes.rb', 줄 58

def has_attribute?(이름)
  속성.키?(이름.to_s)
end

#has_attribute_before_type_cast?(name) ⇒ true | false

문서 에 속성이 할당되고 유형이 변환되기 전에 제공된 속성이 있나요?

예시:

문서에 할당되기 전의 속성이 있나요?

model.has_attribute_before_type_cast?(:name)

매개변수:

  • 이름 (string | 기호)

    속성의 이름입니다.

반환합니다:

  • (true | false)

    키가 attributes_before_type_cast에 있는 경우.



72
73
74
# 파일 'lib/mongoid/attributes.rb', 줄 72

def has_attribute_before_type_cast?(이름)
  attributes_before_type_cast.키?(이름.to_s)
end

#process_raw_attribute(이름, 원시, 필드) ⇒ 객체

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

문서 속성에서 방금 읽은 원시 속성 값을 처리합니다.

매개변수:

  • 이름 (string)

    가져올 속성의 이름입니다.

  • 원시 (객체)

    원시 속성 값입니다.

  • 필드 (필드 | nil)

    악마화 또는 nil에 사용할 필드입니다.

반환합니다:

  • (객체)

    속성의 값입니다.



105
106
107
108
109
# 파일 'lib/mongoid/attributes.rb', 줄 105

def process_raw_attribute(이름, 원시, 필드)
  value = 필드 ? 필드.demongoize(원시) : 원시
  attribute_write_change!(이름) 만약 value.크기 조정 가능?
  value
end

#read_attribute(name) ⇒ 객체 []

문서 속성에서 값을 읽습니다. 값이 존재하지 않으면 nil을 반환합니다.

예시:

속성을 읽습니다.

person.read_attribute(:title)

속성 읽기(대체 구문)

person[:title]

매개변수:

  • 이름 (string | 기호)

    가져올 속성의 이름입니다.

반환합니다:

  • (객체)

    속성의 값입니다.



88
89
90
91
92
# 파일 'lib/mongoid/attributes.rb', 줄 88

def read_attribute(이름)
  필드 = 필드[이름.to_s]
  원시 = read_raw_attribute(이름)
  process_raw_attribute(이름.to_s, 원시, 필드)
end

#read_attribute_before_type_cast(name) ⇒ 객체

유형 캐스트 전에 속성에서 값을 읽습니다. 값이 아직 할당되지 않은 경우 read_raw_attribute를 사용하여 속성의 기존 값을 반환합니다.

예시:

유형 캐스트 전에 속성을 읽습니다.

person.read_attribute_before_type_cast(:price)

매개변수:

  • 이름 (string | 기호)

    가져올 속성의 이름입니다.

반환합니다:

  • (객체)

    사용 가능한 경우 유형 캐스트 전의 속성 값입니다. 그렇지 않으면 속성의 값입니다.



122
123
124
125
126
127
128
129
# 파일 'lib/mongoid/attributes.rb', 줄 122

def read_attribute_before_type_cast(이름)
  속성 = 이름.to_s
  만약 attributes_before_type_cast.키?(속성)
    attributes_before_type_cast[속성]
  other
    read_raw_attribute(속성)
  end
end

#remove_attribute(name) ⇒ 객체

Document 속성에서 값을 제거합니다. 값이 존재하지 않으면 정상적으로 실패합니다.

예시:

속성을 제거합니다.

person.remove_attribute(:title)

매개변수:

  • 이름 (string | 기호)

    제거 속성의 이름입니다.

다음을 발생시킵니다.



141
142
143
144
145
146
147
148
149
150
# 파일 'lib/mongoid/attributes.rb', 줄 141

def remove_attribute(이름)
  validate_writeable_field_name!(이름.to_s)
  as_writable_attribute!(이름) do |액세스|
    _assigning do
      attribute_write_change!(액세스)
      delay_atomic_unsets[atomic_attribute_name(액세스)] = [] 하지 않는 한 new_record?
      속성.삭제(액세스)
    end
  end
end

#typed_attributes객체

유형 캐스트된 속성을 반환합니다.

예시:

유형 캐스팅된 속성입니다.

document.typed_attributes

반환합니다:

  • (객체)

    유형 캐스팅된 속성의 키와 값이 포함된 해시입니다.



259
260
261
# 파일 'lib/mongoid/attributes.rb', 줄 259

def typed_attributes
  attribute_names.map { |이름| [이름, send(이름)] }.to_h
end

#write_attribute(이름, 값) ⇒ 객체 []=

문서 속성 해시에 단일 속성을 씁니다. 또한 전후 업데이트 콜백을 실행하고 필요한 모든 유형 변환을 수행합니다.

예시:

속성을 씁니다.

person.write_attribute(:title, "Mr.")

속성을 작성합니다(대체 구문).

person[:title] = "Mr."

매개변수:

  • 이름 (string | 기호)

    업데이트할 속성의 이름입니다.

  • value (객체)

    속성에 설정하다 값입니다.



164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
# 파일 'lib/mongoid/attributes.rb', 줄 164

def write_attribute(이름, value)
  validate_writeable_field_name!(이름.to_s)

  field_name = database_field_name(이름)

  만약 attribute_missing?(field_name)
    올리다 몽고이드::오류::AttributeNotLoaded.신규(self.클래스, field_name)
  end

  만약 attribute_writeable?(field_name)
    _assigning do
      현지화된 = 필드[field_name].try(:localized?)
      attributes_before_type_cast[이름.to_s] = value
      typed_value = typed_value_for(field_name, value)
      하지 않는 한 속성[field_name] == typed_value || attribute_changed?(field_name)
        attribute_write_change!(field_name)
      end
      만약 현지화된
        현재 = 필드[field_name].try(:localize_present?)
        loc_key, loc_val = typed_value.first
        만약 현재 && loc_val.비어 있나요?
          속성[field_name]&.삭제(loc_key)
        other
          속성[field_name] ||= {}
          속성[field_name].병합!(typed_value)
        end
      other
        속성[field_name] = typed_value
      end

      # 속성을 작성할 때 unset에서도 제거하고,
      # 제거했다가 쓰기 작업을 수행해도 제거되지 않도록 합니다.
      delay_atomic_unsets.삭제(field_name)

      typed_value
    end
  other
    # TODO: MONGOID-5072
  end
end

#write_attributes(attrs = nil) ⇒ 객체 ~ 라고도 함: attributes=

제공된 속성 해시를 문서 에 씁니다. 이렇게 하면 기존 속성이 새 Hash 에 있는 경우에만 기존 속성을 덮어쓰고, 다른 속성은 모두 보존됩니다.

예시:

속성을 씁니다.

person.write_attributes(:title => "Mr.")

속성을 작성합니다(대체 구문).

person.attributes = { :title => "Mr." }

매개변수:

  • attrs (해시) (기본값: nil)

    설정하다 새 속성입니다.



235
236
237
# 파일 'lib/mongoid/attributes.rb', 줄 235

def write_attributes(attrs = nil)
  Assign_attributes(attrs)
end