Rails 7의 비교 검사기

다른 값, 절차 또는 속성과 비교합니다.

ActiveRecord 유효성 검사는 Rails에서 가장 널리 사용되고 잘 알려진 기능입니다. 객체가 데이터베이스에 저장되기 전에 객체의 상태를 검증하는 완전한 검증 프레임워크를 제공합니다. presence , uniqueness , length 등과 같은 다양한 ActiveRecord 유효성 검사기가 있습니다.

일부 값이 있는 속성의 유효성을 검사하는 시나리오가 있는 경우 이전 버전의 Rails에서는 동일한 것에 대한 자체 사용자 지정 유효성 검사를 작성해야 했습니다. 그러나 이제 Rails 7에 추가되었습니다ComparisonValidtor. 이를 통해 비교 가능한 두 값 간의 비교를 쉽게 확인할 수 있습니다. 이 유효성 검사기는 비교를 위해 옵션[ value , proc 또는 symbol ]을 제공해야 합니다.



다른 속성과 함께 start_dateend_date 속성이 있는 모델 약속이 있다고 가정해 보겠습니다.

전에
제공된 값 또는 다른 속성에 대한 속성을 검증end_date해야 하는 경우 아래와 같이 사용자 정의 검증을 작성해야 했습니다.

class Appointment < ApplicationRecord

  validates :start_date, presence: true
  validates :end_date, presence: true
  validate :end_date_is_after_start_date
  def end_date_is_after_start_date
    if end_date < start_date
      errors.add(:end_date, 'can not be before the start 
                 date')
    end
  end
end


레일 7 포함
사용자 지정 유효성 검사를 사용할 필요가 없으며 ComparisonValidtor가 구출됩니다. 비교를 사용하여 다시 작성해 봅시다.

class Appointment < ApplicationRecord
  validates :start_date, presence: true
  validates :end_date, presence: true
  validates :end_date, comparison: { greater_than: :start_date }
  # OR
  validates_comparison_of :end_date, greater_than: :start_date
end



ComparisonValidator는 아래 언급된 옵션에 대한 지원을 제공합니다.
  • greater_than : 값이 제공된 값보다 커야 함을 지정합니다. 기본 오류 메시지는 "%{value}보다 커야 합니다"입니다.
  • greater_than_or_equal_to : 값이 제공된 값보다 크거나 같아야 함을 지정합니다. 기본 오류 메시지는 "%{value}보다 크거나 같아야 합니다"입니다.
  • equals_to : 값이 제공된 값과 같아야 함을 지정합니다.
  • less_than : 값이 제공된 값보다 작아야 함을 지정합니다.
  • less_than_or_equal_to : 값이 제공된 값보다 작거나 같아야 함을 나타냅니다.
  • other_than : 값이 제공된 값과 달라야 함을 지정합니다. 기본 오류 메시지는 "%{value}와 달라야 합니다."입니다
  • .

    여러 비교 옵션을 결합할 수 있습니까?
    네 그럼요! 여러 비교 옵션을 결합할 수 있습니다.

    end_date가 start_date보다 커야 하고 end_date가 오늘이 아닌지 확인하려고 한다고 가정해 봅시다.

    class Appointment < ApplicationRecord
      validates :start_date, presence: true
      validates :end_date, presence: true
      validates_comparison_of :end_date, greater_than: 
       :start_date, other_than: Date.today
    end
    


    ComparisonValidator는 날짜 비교 전용입니까?
    절대 아닙니다. numeric , datestring 값을 ComparisonValidator와 비교할 수 있습니다.

    class Author < ApplicationRecord
       validates_comparison_of :books_count, greater_than: 5
    end
    


    ComparisonValidator는 확실히 Rails 7의 훌륭한 추가 기능입니다. 이를 통해 사용자 지정 유효성 검사를 작성하지 않고도 데이터를 비교할 수 있고 데이터를 쉽게 유효성 검사할 수 있습니다.

    행복한 코딩!!❤️

    좋은 웹페이지 즐겨찾기