2017-02-21 11 views
1

몇 가지 값을 허용하는 포함 유효성 검사가 있고 더 많은 값을 갖기 위해 확장 할 것입니다.유효성 검사를 통과 할 항목 목록을 반환하는 방법

내 포함 유효성 검사에 사용한 값 배열을 반환하는 메서드가 있는지 궁금합니다.

class Outlet < ApplicationRecord 
    belongs_to :user 
    has_many :comments 

    validates :category, :title, :body, :urgency, :user, presence: true 
    validates :title, length: { in: 1..60 } 
    validates :body, length: { in: 1..1000 } 
    validates :urgency, numericality: { only_integer: true, greater_than_or_equal_to: 1, less_than_or_equal_to: 10 } 
    validates :category, inclusion: { in: ['vent', 'rant', 'qualm'] } 
end 

답변

2

ActiveModel 클래스 메소드 validators_on는 지정된 필드에 대한 모든 유효성 검사기를 반환합니다. 예컨대 : 그것은 이런 내포 값을 얻을 수

Outlet.validators_on(:category) 
#=> [#<ActiveRecord::Validations::PresenceValidator:0x007fd2350e4b88 ...>, #<ActiveModel::Validations::InclusionValidator:0x007fd23a872cd8 ...>] 

:

Outlet.validators_on(:category) 
    .find { |validator| validator.is_a?(ActiveModel::Validations::InclusionValidator) } 
    .options[:in] 

이 옵션의 배열을 반환한다.

그러나 동일한을 달성하기 위해 깨끗한 방법은 클래스 상수에 옵션을 추출하는 것입니다 :

class Outlet < ApplicationRecord 
    ALLOWED_CATEGORIES = %w(vent rant qualm).freeze 

    # ... 

    validates :category, inclusion: { in: ALLOWED_CATEGORIES } 
end 

그런 다음 Outlet::ALLOWED_CATEGORIES

+0

다양한 정보를 통해 허용되는 값에 액세스 할 수 있습니다. 고맙습니다! –