문서 유효성 검사
이 페이지의 내용
개요
이 가이드 에서는 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/
포함 또는 제외 규칙
inclusion
및 exclusion
헬퍼를 사용하여 필드 값이 지정된 값 목록에 있는지 여부에 따라 문서 유효성을 검사할 수 있습니다. in
옵션을 사용하여 값 목록을 지정합니다.
이 예시 shipping
필드 값이 허용되는 값 중 하나인지 확인하기 위해 Order
모델에 포함 유효성 유효성 검사 규칙을 정의합니다.
class Order include Mongoid::Document field :shipping, type: String validates :shipping, inclusion: { in: %w(standard priority overnight) } end
유무 규칙
presence
및 absence
헬퍼를 사용하여 필드 값이 있는지 여부(비어 있음)에 따라 문서 유효성을 검사할 수 있습니다.
이 예시 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) }
연관 관계 검증
validates_associated
헬퍼를 사용하여 모델에 있는 모든 연결의 유효성을 검사할 수 있습니다. 이 유효성 검사 규칙을 포함하면 Mongoid는 인스턴스 를 저장하려고 할 때마다 모든 연관 문서의 유효성을 검사합니다. 연결에 대해 자세히 학습 연결 가이드 참조하세요.
이 예시 포함된 Book
인스턴스에 대한 유효성 검사 검사 규칙을 실행 위해 Author
모델에 대한 연결 유효성 유효성 검사 규칙을 정의합니다.
class Author include Mongoid::Document embeds_many :books validates_associated :books end
중요
연관 관계의 양쪽 끝에 validates_associated
헬퍼를 사용하면 Mongoid가 무한 루프에서 유효성 검사를 수행하므로 사용하지 마세요.
사용자 지정 유효성 검사 규칙
validates_each
및 validates_with
헬퍼를 사용하여 사용자 지정 유효성 검사기를 만들 수 있습니다. 이러한 헬퍼에 대해 자세히 학습 예제를 보려면 액티브 레코드 문서에서 validates_each 및 validates_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 모델에서 사용할 수 있는 필드 유형에 대해 자세히 학습 필드 유형 가이드 참조하세요.
Mongoid의 유효성 검사 메서드 및 매크로에 대해 자세히 학습 API 문서에서 Mongoid::Validatable 모듈 참조를 참조하세요.
Active Record의 유효성 검사 헬퍼 전체 목록을 보려면 Rails API 문서에서 ActiveModel::Validations::HelperMethods 참조를 확인하세요.