Learn the "why" behind slow queries and how to fix them in our 2-Part Webinar.
Register now >
Docs Menu
Docs Home
/ /

Configure Document Validation

이 가이드 에서는 Mongoid 모델에서 유효성 검사 규칙을 정의하는 방법을 학습 수 있습니다. 모델에 유효성 검사 구현 후에는 Mongoid가 유효성 검사 규칙을 위반하는 쓰기 (write) 작업을 실행 하지 못하도록 합니다. 문서 유효성 검사 사용하여 컬렉션에 있는 문서 필드의 데이터 유형과 값 범위를 제한합니다.

Mongoid에는 Active Record의 ActiveModel::Validations 가 포함되어 있어 관련 유효성 검사기 및 고유성 유효성 검사기를 포함한 유효성 검사 기능을 제공합니다. 자세한 학습 은 액티브 레코드 유효성 검사 Rails 가이드 및 ActiveModel::Validations Rails API 설명서를 참조하세요.

참고

Mongoid와 MongoDB 유효성 검사 비교

Mongoid의 유효성 검사는 애플리케이션 의 컨텍스트에만 적용되며 MongoDB 에서 스키마 유효성 검사 규칙을 생성하는 것과는 다릅니다. 즉, 애플리케이션 외부에서 수행되는 쓰기 (write) 작업에는 유효성 검사 규칙이 적용 않습니다. MongoDB 스키마 유효성 검사 에 대해 자세히 학습 서버 매뉴얼에서 스키마 유효성 검사 참조하세요.

Mongoid는 모델 클래스를 정의할 때 사용할 수 있는 Active Record 유효성 검사 검사 헬퍼를 지원합니다. 이러한 헬퍼를 사용하여 필드 있는지 확인하거나, 필드 값을 지정된 값과 비교하거나, 필드 에 고유한 값이 있는지 확인하는 등 애플리케이션 에서 일반적인 유효성 검사 규칙을 설정하다 수 있습니다.

validates 매크로를 사용하여 유효성 검사 규칙을 만든 다음 유효성 검사 헬퍼와 규칙에 필요한 사양을 포함합니다.

각 유효성 검사 헬퍼는 하나 이상의 필드 이름을 허용하므로 여러 필드에 대해 동일한 규칙을 정의할 수 있습니다.

다음 코드는 presence 유효성 검사 헬퍼를 사용하여 Person 인스턴스에 name 필드 값이 포함되도록 요구하는 방법을 보여 줍니다.

class Person
include Mongoid::Document
field :name, type: String
validates :name, presence: true
end

가이드 의 일반적인 유효성 검사 섹션에서 다른 유용한 유효성 검사 헬퍼에 대해 학습 수 있습니다.

이 섹션에서는 다음과 같은 일반적인 유효성 검사 규칙에 대해 학습 유효성 검사 헬퍼를 사용하는 예제를 볼 수 있습니다.

comparison 헬퍼를 사용하여 지정된 필드 값을 기반으로 문서 유효성을 검사할 수 있습니다.

comparison 헬퍼는 다음 옵션을 지원합니다.

  • greater_than: 값은 제공된 값보다 커야 합니다.

  • greater_than_or_equal_to: 값은 제공된 값보다 크거나 같아야 합니다.

  • equal_to: 값은 제공된 값과 같아야 합니다.

  • less_than: 값은 제공된 값보다 작아야 합니다.

  • less_than_or_equal_to: 값은 제공된 값보다 작거나 같아야 합니다.

  • other_than: 값은 제공된 값과 달라야 합니다.

이 예시 Order 모델에 대해 다음과 같은 비교 유효성 검사 규칙을 정의합니다.

  • delivery_date: 다음 값 이후(보다 큰)여야 합니다. order_date

  • quantity: 다음보다 작아야 합니다. 5

class Order
include Mongoid::Document
field :order_date, type: DateTime
field :delivery_date, type: DateTime
field :quantity, type: Integer
validates :delivery_date, comparison: { greater_than: :order_date }
validates :quantity, comparison: { less_than: 5 }
end

format 헬퍼를 사용하여 필드 값이 정규 표현식 과 일치하는지 여부에 따라 문서 유효성을 검사할 수 있습니다. with 옵션을 사용하여 정규 표현식 지정합니다.

이 예시 User 모델에 대한 형식 유효성 검사 규칙을 정의하여 username 필드 에 문자만 포함되도록 합니다.

class User
include Mongoid::Document
field :username, type: String
validates :username, format: { with: /\A[a-zA-Z]+\z/ }
end

대체 헬퍼 메서드

Mongoid::Document 모듈은 특정 유효성 검사를 위한 매크로 메서드를 제공합니다. validates 매크로 성명서 에서 format 유효성 검사 헬퍼를 사용하는 대신 다음 코드에 표시된 대로 validates_format_of 메서드를 사용할 수 있습니다.

validates_format_of :username, with: /\A[a-zA-Z]+\z/

inclusionexclusion 헬퍼를 사용하여 필드 값이 지정된 값 목록에 있는지 여부에 따라 문서 유효성을 검사할 수 있습니다. in 옵션을 사용하여 값 목록을 지정합니다.

이 예시 shipping 필드 값이 허용되는 값 중 하나인지 확인하기 위해 Order 모델에 포함 유효성 유효성 검사 규칙을 정의합니다.

class Order
include Mongoid::Document
field :shipping, type: String
validates :shipping, inclusion: { in: %w(standard priority overnight) }
end

presenceabsence 헬퍼를 사용하여 필드 값이 있는지 여부(비어 있음)에 따라 문서 유효성을 검사할 수 있습니다.

이 예시 Order 모델에 대한 부재 유효성 검사 규칙을 정의하여 delivery_date 필드 값이 nil 또는 빈 문자열이 되도록 합니다.

class Order
include Mongoid::Document
field :delivery_date, type: String
validates :delivery_date, absence: true
end

대체 헬퍼 메서드

Mongoid::Document 모듈은 특정 유효성 검사를 위한 매크로 메서드를 제공합니다. validates 매크로 성명서 에서 presence 유효성 검사 헬퍼를 사용하는 대신 다음 코드에 표시된 대로 validates_presence_of 메서드를 사용할 수 있습니다.

validates_presence_of :delivery_date

필드 값이 컬렉션 의 다른 값과 고유한지 여부에 따라 uniqueness 헬퍼를 사용하여 문서 유효성을 검사할 수 있습니다. scope 옵션을 사용하여 Mongoid가 고유성 검사를 제한하는 데 사용하는 필드 이름을 하나 이상 지정할 수 있습니다.

이 예시 first_name 필드 값이 동일한 last_name 값을 가진 문서 내에서 고유하도록 Person 모델에 대한 고유성 유효성 유효성 검사 규칙을 정의합니다.

class Person
include Mongoid::Document
field :first_name, type: String
field :last_name, type: String
validates :first_name, uniqueness: { scope: :last_name }
end

대체 헬퍼 메서드

Mongoid::Document 모듈은 특정 유효성 검사를 위한 매크로 메서드를 제공합니다. validates 매크로 성명서 에서 uniqueness 유효성 검사 헬퍼를 사용하는 대신 다음 코드에 표시된 대로 validates_uniqueness_of 메서드를 사용할 수 있습니다.

validates_uniqueness_of :first_name

Mongoid는 모델에서 validates_uniqueness_of 메서드를 사용할 때 primary 읽기 설정 (read preference) 사용하는데, 이는 복제본 세트 의 세컨더리 멤버를 쿼리하면 오래된 데이터를 읽을 수 있기 때문입니다.

이 메서드는 Mongoid가 고유성을 확인할 때 추가할 조건을 지정할 수 있는 conditions 옵션을 사용합니다.

validates_uniqueness_of :name, conditions: -> { where(:age.gte => 10) }

You can use the validates_associated helper to validate any associations that your model has. When you include this validation rule, Mongoid validates any association documents any time you try to save an instance. To learn more about associations, see the Use Data Associations guide.

이 예시 포함된 Book 인스턴스에 대한 유효성 검사 검사 규칙을 실행 위해 Author 모델에 대한 연결 유효성 유효성 검사 규칙을 정의합니다.

class Author
include Mongoid::Document
embeds_many :books
validates_associated :books
end

중요

연관 관계의 양쪽 끝에 validates_associated 헬퍼를 사용하면 Mongoid가 무한 루프에서 유효성 검사를 수행하므로 사용하지 마세요.

validates_eachvalidates_with 헬퍼를 사용하여 사용자 지정 유효성 검사기를 만들 수 있습니다. 이러한 헬퍼에 대해 자세히 학습 예제를 보려면 액티브 레코드 문서에서 validates_eachvalidates_with 참조를 참조하세요.

사용자 지정 유효성 검사기에 대해 자세히 학습하려면 액티브 레코드 문서에서 사용자 지정 유효성 검사 수행하기 를 참조하세요.

Mongoid는 문서 를 데이터베이스 에 유지하거나 저장할 때 유효성 검사 수행합니다. 다음 메서드는 유효성 검사 규칙을 트리거하다 Mongoid는 유효성 검사 통과한 경우에만 객체 데이터베이스 에 저장합니다.

  • create

  • save

  • update

앞의 메서드의 !접미사가 있는 버전을 사용할 때, 객체 에 대한 유효성 검사 실패하면 Mongoid는 Mongoid::Errors::Validations 예외를 반환합니다.

valid? 메서드를 사용하여 유효성 검사를 수동으로 실행 수 있습니다. 이 메서드는 객체 유효성 검사 통과하면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.

class Person
include Mongoid::Document
field :name, type: String
field :age, type: Integer
validates :age, comparison: { greater_than_or_equal_to: 0 }
end
# Returns true
Person.new(name: "Berta Odom", age: 4).valid?
# Returns false
Person.new(name: "Cody Peng", age: -5).valid?

Mongoid는 영구 데이터에서 valid? 를 실행 때 Active Record와 다르게 동작합니다. Active Record의 valid? 는 모든 유효성 검사를 실행하지만 Mongoid의 valid? 는 성능을 최적화하기 위해 메모리에 있는 문서에 대해서만 유효성 검사를 실행합니다.

Mongoid 모델에서 사용할 수 있는 필드 유형에 대해 자세히 학습 BSON 필드 유형 사용 가이드 참조하세요.

Mongoid의 유효성 검사 메서드 및 매크로에 대해 자세히 학습 API 문서에서 Mongoid::Validatable 모듈 참조를 참조하세요.

Active Record의 유효성 검사 헬퍼 전체 목록을 보려면 Rails API 문서에서 ActiveModel::Validations::HelperMethods 참조를 확인하세요.

돌아가기

문서

이 페이지의 내용