[결정판] Rails로 개별 속성을 검증하는 사용자 정의 버전 만들기
5950 단어 Rails
ActiveModel::EachValidator
를 이용하여 개별 프로젝트를 검증한 가시 데이터의 제작 방법을 기초에서 응용까지 설명한다토대
먼저 Rails 가이드읽어보세요.
사용자 정의 발리 데이터를 추가하여 개별 속성을 검증합니다.ActiveModel::EachValidator가 가장 간단하고 편리합니다.이런 상황에서 이 사용자 정의 발리 데이터 클래스는validate이다each 방법을 설치해야 합니다.이 방법은 이 실례에 대응하는'기록과 속성과 값', 검증을 실행하는 속성과 실례 속성 값을 제출하는 세 가지 파라미터를 취한다.
class EmailValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
unless value =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
record.errors[attribute] << (options[:message] || "はメールアドレスではありません")
end
end
end
class Person < ActiveRecord::Base
validates :email, presence: true, email: true
end
위의 예에서 보듯이 표준적인 가시와 사용자 정의 가시를 조합할 수도 있다.이런 견해가 있다.
보충.확실히, 나는 이렇게 이동하는 것이 괜찮다고 생각하지만, 가시 데이터는
app/validators/email_validator.rb
에 놓고, 모형에app/models/model_name.rb
validates :field_name, email: true
잠깐만, 나는 두 개를 나누어 쓰는 것이 매우 평범하다고 생각한다.보완 완료그렇군요.
email: true
와 같은 가시 데이터는 이 지식만으로도 만들 수 있지만 true
만 완성할 수 있는 가시 데이터, 즉 inclusion: ['01', '02']
, 옵션numericality: { only_integer: true }
과 같은 가시 데이터는 실현할 수 없습니다.그럼 응용편입니다.
응용 프로그램
옵션 모드
그럼 이해하기 쉽고 선택적인 패턴부터 시작하죠.
numericality: { only_integer: true }
와 같이 Hash
를 호출할 때 { only_integer: true }
는 (파라미터에 없음)options
를 통해 얻을 수 있다.즉 only_integer
의 값을 얻으려면 options[:only_integer]
라고 불러야 한다.Rails 가이드의 예에도
options[:message]
라고 쓰여 있는 부분이 있다validates :field_name, email: { message: 'を正しく入力してください' }
이렇게 쓰는 기능도 갖추었다.옵션 모드 없음
그렇다면
Hash
, 즉inclusion: ['01', '02']
이런 호출 모드가 없는 상황에서 제공된['01', '02']
부분을 어떻게 수신할 것인가.이거, 가볍게 찾아봤는데 설명이 없어서 드디어 도착했어요Rails 소스 봐봐..결론은 다음과 같습니다.['01', '02']
:Range
또는 Array
의 경우 options[:in]
에서 options[:with]
에이!해시 값이 지정한 유형에 따라 취법이 바뀔까요?아, 그런데 확실히 옵션의 유무에 따라
validates :field_name, format: /\A[a-zA-Z]+\z/
validates :field_name, format: { with: /\A[a-zA-Z]+\z/, message: "英文字のみが使用できます" }
validates :field_name, inclusion: %w(small medium large)
validates :field_name, inclusion: { in: %w(small medium large), message: "%{value} のサイズは無効です" }
이처럼 in
와with
가 (자연스럽게) 분리돼 사용되는 경우를 많이 봤죠.그게 그런 건가?총결산
스스로 라일스의 스퍼트 데이터를 만들 때
in
와with
의 차이를 모르고 사용하면 푹 빠지기 쉽다.
Reference
이 문제에 관하여([결정판] Rails로 개별 속성을 검증하는 사용자 정의 버전 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/youcune/items/74f7c0ab0784519124c5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)