모듈: Mongoid::Fields

확장자:
ActiveSupport::Concern
포함 항목:
컴포저블
다음에 정의됨:
lib/mongoid/fields.rb,
lib/mongoid/fields/standard.rb,
lib/mongoid/fields/ 암호화됨.rb,
lib/mongoid/fields/localized.rb,
lib/mongoid/fields/foreign_key.rb,
lib/mongoid/fields/validators/macro.rb

개요

이 모듈은 필드의 동작을 정의합니다.

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

모듈: ClassMethods, 유효성 검사기 클래스: Encrypted, foreignKey, Localized, Standard

상수 요약 접기

StringifiedSymbol =
몽고이드::StringifiedSymbol
부울 =
몽고이드::부울
TYPE_MAPPINGS =

기호로 정의된 필드에는 올바른 클래스를 사용하세요.

{
  배열: 배열,
  big_decimal: BigDecimal,
  바이너리: BSON::바이너리,
  부울: 몽고이드::부울,
  날짜: 날짜,
  date_time: 날짜/시간,
  float: Float,
  해시: 해시,
  정수: Integer,
  object_id: BSON::ObjectId,
  범위: 범위,
  regexp: 정규 표현식,
  설정하다: 세트,
  string: 문자열,
  stringified_symbol: StringifiedSymbol,
  기호: 기호,
  시간: 시간
}.with_in Different_access
IDS =

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

문서 에 있는 _id 필드 의 모든 이름에 대한 상수입니다.

여기에는 _id 필드 의 별칭이 포함되지 않습니다.

[ :_id, '_id', ].동결
INVALID_BSON_CLASSES =

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

필드 유형으로 지원되지 않는 BSON 클래스

[ BSON::Decimal128, BSON::Int32, BSON::Int64 ].동결

클래스 메서드 요약 접기

인스턴스 메서드 요약 접기

클래스 메서드 세부 정보

.database_field_name(이름, 관계, aliased_fields, aliased_associations) ⇒ string

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

데이터베이스 에 저장된 제공된 필드 의 이름을 가져옵니다. 필드 의 별칭 지정 여부를 결정하는 데 사용됩니다. 마침표 "."로 구분된 내장된 문서 및 필드의 별칭을 재귀적으로 찾습니다. 문자.

이 메서드는 데이터베이스에 저장된 연관 관계의 이름을 반환하는 반면, 'relations' 해시는 코드 내 별칭을 사용합니다. 관계 해시의 멤버십을 확인하려면 먼저 aliased_associations 해시에서 이 메서드에서 반환된 string 을 조회해야 합니다.

이 메서드는 마지막 항목이 아닌 types_to 연관 관계의 별칭을 확장하지 않습니다. 예를 예시, has_many 학생이 있는 학교가 있고 전달된 필드 이름이 (Student의 관점에서) 다음과 같은 경우:

school._id

types_to 연관 관계의 별칭은 해당 연관 관계의 _id 필드입니다. 따라서 이 연관 관계를 확장하면 다음과 같은 결과가 나타납니다.

school_id._id

여기서 의도는 _id 필드 의 속성 을 가져오지 않았기 때문에 올바른 필드 이름이 아닙니다. 의도는 참조 문서 의 속성 을 가져오는 것입니다. 따라서 전달된 이름의 일부가 이름의 마지막 부분이 아닌 exists_to 연관 관계인 경우, 해당 별칭을 확장하지 않고 다음을 반환합니다.

school._id

types_to 연관 관계가 이름의 마지막 부분인 경우, _id 필드 를 다시 전달합니다.

매개변수:

  • 이름 (string | 기호)

    가져올 이름입니다.

  • 관계 (해시)

    연관 관계.

  • aliased_fields (해시)

    별칭이 지정된 필드.

  • aliased_associations (해시)

    별칭이 지정된 연관 관계.

반환합니다:

  • (string)

    데이터베이스 에 저장된 필드 의 이름입니다.



410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
# 파일 'lib/mongoid/fields.rb', 410줄

def database_field_name(이름, 관계, aliased_fields, aliased_associations)
  반환 nil 하지 않는 한 이름.현재?
   = 이름.to_s
  세그먼트, 나머지 = .split('.', 2)

  # 필드 의 별칭을 가져오지 않습니다.
  #이 마지막 항목이 아닙니다. 따라서 다음 중 하나가 완료되면 별칭을 가져옵니다.
  # 다음이 참입니다:
  # 1. 이 항목이 마지막 항목이므로 남은 항목이 없습니다.
  # 2. 협회가 아닙니다.
  # 3. 속해 있는 연관 관계가 아닙니다.
  만약 !나머지 || !관계.키?(세그먼트) || !관계[세그먼트].is_a?(연관 관계::참조됨::Belongs To)
    세그먼트 = aliased_fields[세그먼트]&.dup || 세그먼트
  end

  반환 세그먼트 하지 않는 한 나머지

  관계 = 관계[aliased_associations[세그먼트] || 세그먼트]
  만약 관계
    k = 관계.class
    "#{세그먼트}.#{database_field_name(나머지, k.관계, k.aliased_fields, k.aliased_associations)}"
  other
    "#{세그먼트}.#{나머지}"
  end
end

.옵션(option_name, &block) ⇒ 객체

지정된 옵션 이름이 필드에 정의되어 있을 때 실행할 제공된 블록을 저장합니다.

핸들러가 어떤 기능을 수행할 수 있는지에 대한 가정은 이루어지지 않으므로 필드 정의에 'option_name' 키가 제공되면 false 또는 nil인 경우에도 항상 호출됩니다.

예시:

Mongoid::Fields.option :required do |model, field, value|
  model.validates_presence_of field if value
end

매개변수:

  • option_name (기호)

    일치시킬 옵션 이름

  • &block

    옵션이 제공될 때 실행할 핸들러입니다.



293
294
295
# 파일 'lib/mongoid/fields.rb', 293줄

def 옵션(option_name, &차단)
  옵션[option_name] = 차단
end

.optionsHash

사용자 지정 옵션 이름 맵을 해당 핸들러에 반환합니다.

예시:

Mongoid::Fields.options
# => { :required => #<Proc:0x00000100976b38> }

반환합니다:

  • (해시)

    옵션 맵



304
305
306
# 파일 'lib/mongoid/fields.rb', 304줄

def 옵션
  @options ||= {}
end

.traverse_association_tree(키, 필드, 연관 관계, aliased_associations) {|The, The, When| ... } ⇒ 필드

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

연관 트리를 아래로 이동하여 주어진 키에 대한 필드 를 검색 합니다. 이렇게 하려면 키를 '.'로 분할 합니다. 키의 각 부분(meth)에 대해 다음을 수행합니다.

  • meth가 필드 인 경우 meth, 필드 및 is_field를 true로 반환합니다.

  • 메타데이터가 연관 관계인 경우, klass를 연관 관계의 klass로 업데이트 하고, meth, klass 및 is_field를 false로 반환합니다.

다음 반복에서는 klass의 필드와 연결을 사용하여 트리를 계속 탐색합니다.

매개변수:

  • (string)

    연관 트리를 검색 하는 데 사용되는 키입니다.

  • 필드 (해시)

    검색 을 시작할 필드입니다.

  • 연관 관계 (해시)

    검색 을 시작할 연관 관계입니다.

  • aliased_associations (해시)

    검색 을 시작할 수 있는 불안한 연관 관계입니다.

  • &block

    차단.

수율 매개변수:

  • (기호)

    현재 메서드.

  • (기호 | string)

    필드 또는 관계.

  • 여부 (true | false)

    두 번째 yield 매개변수가 필드 인지 여부입니다.

반환합니다:

  • (필드)

    검색 이 끝날 때 지정된 키에 대해 발견된 필드 입니다. 마지막으로 발견된 것이 연관 관계이거나 주어진 키에 대한 필드 가 없는 경우 nil을 반환합니다.



335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
# 파일 'lib/mongoid/fields.rb', 335줄

def traverse_association_tree(, 필드, 연관 관계, aliased_associations)
  class = nil
  필드 = nil
  .split('.').each_with_index do |meth, i|
    fs = i == 0 ? 필드 : class&.필드
    rs = i == 0 ? 연관 관계 : class&.관계
    방식 = i == 0 ? aliased_associations : class&.aliased_associations

    # 연관 관계에는 이름과 별칭이라는 두 개의 "키"가 있을 수 있습니다.
    # 필드 이름은 klass의 관계에 저장하는 데 사용됩니다.
    # 및 필드 해시, 별칭은 해당 필드 를 저장 하는 데 사용됩니다.
    # 데이터베이스. 이 함수에 입력된 키는 별칭이 지정된 키입니다.
    # 키. 다음에서 해당 이름을 다시 이름으로 변환할 수 있습니다.
    # aliased_associations 해시.
    별칭 = meth
    만약 방식 && a = 방식.가져오기(meth, nil)
      별칭 = a.to_s
    end

    필드 = nil
    class = nil
    만약 fs && f = fs[별칭]
      필드 = f
      yield(meth, f, true) 만약 block_given?
    elsif rs && rel = rs[별칭]
      class = rel.class
      yield(meth, rel, 거짓) 만약 block_given?
    other
      yield(meth, nil, 거짓) 만약 block_given?
    end
  end
  필드
end

인스턴스 메서드 세부 정보

#apply_default(name) ⇒ 객체

지정된 이름에 단일 기본값 을 적용합니다.

예시:

단일 기본값 을 적용합니다.

model.apply_default("name")

매개변수:

  • 이름 (string)

    필드의 이름입니다.



178
179
180
181
182
183
184
185
186
187
188
# 파일 'lib/mongoid/fields.rb', 178줄

def apply_default(이름)
  하지 않는 한 속성.키?(이름)
    만약 필드 = 필드[이름]
      기본 = 필드.eval_default(self)
      하지 않는 한 기본.nil? || 필드.게으른가요?
        attribute_write_change!(이름)
        속성[이름] = 기본
      end
    end
  end
end

#apply_defaults객체

모든 기본값을 한 번에 적용합니다.

예시:

모든 기본값을 적용합니다.

model.apply_defaults


194
195
196
197
198
# 파일 'lib/mongoid/fields.rb', 194줄

def apply_defaults
  보류 중인_콜백.삭제(:apply_defaults)
  apply_pre_processed_defaults
  apply_post_processed_defaults
end

#apply_post_processed_defaultsArray<String>

문서 에 기본값인 모든 기본값 을 적용합니다.

예시:

모든 절차 기본값을 적용합니다.

model.apply_post_processed_defaults

반환합니다:

  • (Array<String>)

    절차 기본값의 이름입니다.



165
166
167
168
169
170
# 파일 'lib/mongoid/fields.rb', 165줄

def apply_post_processed_defaults
  보류 중인_콜백.삭제(:apply_post_processed_defaults)
  post_processed_defaults. do |이름|
    apply_default(이름)
  end
end

#apply_pre_processed_defaultsArray<String>

절차가 아닌 문서에 모든 기본값을 적용합니다.

예시:

모든 비프로시저 기본값을 적용합니다.

model.apply_pre_processed_defaults

반환합니다:

  • (Array<String>)

    non-proc 기본값의 이름입니다.



153
154
155
156
157
# 파일 'lib/mongoid/fields.rb', 153줄

def apply_pre_processed_defaults
  pre_processed_defaults. do |이름|
    apply_default(이름)
  end
end

#attribute_namesArray<String>

이 객체 에서 사용할 수 있는 속성의 이름 배열 을 반환합니다.

ORM에 구애받지 않는 방식으로 필드 이름을 제공합니다. Rails v3.1+ 은(는) 이 메서드를 사용하여 JSON 요청에서 매개변수를 자동으로 래핑합니다.

예시:

필드 이름 가져오기

document.attribute_names

반환합니다:

  • (Array<String>)

    필드 이름



209
210
211
# 파일 'lib/mongoid/fields.rb', 209줄

def attribute_names
  self.클래스.attribute_names
end

#database_field_name(name) ⇒ string

데이터베이스에 저장되는 제공된 필드의 이름을 가져옵니다. 필드의 별칭 지정 여부를 결정하는 데 사용됩니다.

예시:

데이터베이스 필드 이름을 가져옵니다.

model.database_field_name(:authorization)

매개변수:

  • 이름 (string | 기호)

    가져올 이름입니다.

반환합니다:

  • (string)

    db에 저장되는 필드 의 이름입니다.



222
223
224
# 파일 'lib/mongoid/fields.rb', 222줄

def database_field_name(이름)
  self.클래스.database_field_name(이름)
end

#dot_dollar_field?(name) ⇒ true | false

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

이 필드 가 달러 기호($)로 시작하거나 점/마침표(.)를 포함하나요?

매개변수:

  • 이름 (string)

    필드 이름입니다.

반환합니다:

  • (true | false)

    이 필드 가 점으로 표시되어 있거나 달러로 표시되어 있는 경우



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

def dot_dollar_field?(이름)
  n = aliased_fields[이름] || 이름
  필드.키?(n) && (n.포함?('.') || n.start_with?('$'))
end

#Lazy_settable?(필드, 값) ⇒ true | false

제공된 필드 가 지연 평가인가요?

예시:

필드 가 지연 설정 가능한 경우.

doc.lazy_settable?(field, nil)

매개변수:

  • 필드 (필드)

    필드 입니다.

  • value (객체)

    현재 값입니다.

반환합니다:

  • (true | false)

    필드를 느리게 설정하는 경우.



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

def 지연 설정?(필드, value)
  !동결? && value.nil? && 필드.게으른가요?
end

#using_object_ids?true | false

참고:

클래스 로드 성능을 위해 위임을 사용하지 않도록 리팩터링했습니다.

문서 에서 객체 ID를 사용하고 있나요?

예시:

문서 에서 객체 ID를 사용하고 있나요?

model.using_object_ids?

반환합니다:

  • (true | false)

    객체 ID 사용.



247
248
249
# 파일 'lib/mongoid/fields.rb', 247줄

def using_object_ids?
  self.클래스.using_object_ids?
end

#validate_writeable_field_name!(name) ⇒ 객체

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

필드 가 달러 기호($)로 시작하는지 또는 점/마침표(.)를 포함하는지 확인합니다.

매개변수:

  • 이름 (string)

    필드 이름입니다.

다음을 발생시킵니다.

  • (InvalidDotDollarAssignment)

    점이 포함되거나 달러로 시작하는 경우



271
272
273
274
275
# 파일 'lib/mongoid/fields.rb', 271줄

def validate_writeable_field_name!(이름)
  만약 dot_dollar_field?(이름)
    올리다 오류::InvalidDotDollarAssignment.신규(self.클래스, 이름)
  end
end