복붙노트

[RUBY-ON-RAILS] 날짜 검증에 내장 된 레일

RUBY-ON-RAILS

날짜 검증에 내장 된 레일

레일은 날짜에 대한 검증을 할 수 있습니까? 나는 플러그인을 발견 http://github.com/adzap/validates_timeliness/tree/master, 하지만 상자 밖으로 와서해야 뭔가처럼 보인다.

해결법

  1. ==============================

    1.아무 날짜 시간에 대한 액티브 유효성 검사기 내장하지 않습니다,하지만 당신은 쉽게 이런 일에, 플러그인을 사용하지 않고, 액티브 모델로 능력이 종류를 추가 할 수 있습니다 :

    아무 날짜 시간에 대한 액티브 유효성 검사기 내장하지 않습니다,하지만 당신은 쉽게 이런 일에, 플러그인을 사용하지 않고, 액티브 모델로 능력이 종류를 추가 할 수 있습니다 :

    class Thing < ActiveRecord::Base
      validate :happened_at_is_valid_datetime
    
      def happened_at_is_valid_datetime
        errors.add(:happened_at, 'must be a valid datetime') if ((DateTime.parse(happened_at) rescue ArgumentError) == ArgumentError)
      end
    end
    
  2. ==============================

    2.게이브의 대답은 그래서 여기 내 날짜를 확인하기 위해 무슨 짓을했는지, 나를 위해 작동하지 않았다 :

    게이브의 대답은 그래서 여기 내 날짜를 확인하기 위해 무슨 짓을했는지, 나를 위해 작동하지 않았다 :

    class MyModel < ActiveRecord::Base
      validate :mydate_is_date?
    
      private
    
      def mydate_is_date?
        if !mydate.is_a?(Date)
          errors.add(:mydate, 'must be a valid date') 
        end
      end
    end
    

    난 그냥 날짜가 실제로 날짜, 그리고 문자열, 문자, INT, 플로트 등임을 검증하기 위해 찾고 있었다 ...

    더 복잡한 날짜 확인은 여기에서 찾을 수 있습니다 : https://github.com/codegram/date_validator

  3. ==============================

    3.잘못된 값은 사용자 정의 유효성 검사기에 NILS로 전달 될 수 있도록 레일의 최신 버전은 검증하기 전에 캐스트 값을 입력합니다. 나는 이런 식으로 뭔가를하고 있어요 :

    잘못된 값은 사용자 정의 유효성 검사기에 NILS로 전달 될 수 있도록 레일의 최신 버전은 검증하기 전에 캐스트 값을 입력합니다. 나는 이런 식으로 뭔가를하고 있어요 :

    # app/validators/date_time_validator.rb
    class DateTimeValidator < ActiveModel::EachValidator
      def validate_each(record, attribute, value)
        if record.public_send("#{attribute}_before_type_cast").present? && value.blank?
          record.errors.add(attribute, :invalid)
        end
      end
    end
    
    # app/models/something.rb
    class Something < ActiveRecord::Base
      validates :sold_at, date_time: true
    end
    
    # spec/models/something_spec.rb (using factory_girl and RSpec)
    describe Something do
      subject { build(:something) }
    
      it 'should validate that :sold_at is datetimey' do
        is_expected.not_to allow_value(0, '0', 'lorem').for(:sold_at).with_message(:invalid)
        is_expected.to allow_value(Time.current.iso8601).for(:sold_at)
      end
    end
    
  4. ==============================

    4.나는 보석 date_validator을 추천합니다. https://rubygems.org/gems/date_validator를 참조하십시오. 그것은 잘 유지되고 그 API는 간단하고 컴팩트하다.

    나는 보석 date_validator을 추천합니다. https://rubygems.org/gems/date_validator를 참조하십시오. 그것은 잘 유지되고 그 API는 간단하고 컴팩트하다.

  5. ==============================

    5.당신은 직접 사용자 지정 날짜 유효성 검사기를 만들 수 있습니다

    당신은 직접 사용자 지정 날짜 유효성 검사기를 만들 수 있습니다

    1) 폴더를 내부 응용 프로그램 디렉토리라는 유효성 검사기를 만들

    2) 파일 datetime_validator.rb을 만듭니다. 다음과 같은 내용의 내부 응용 프로그램 / 검증 디렉토리와

     class DatetimeValidator < ActiveModel::EachValidator
      def validate_each(record, attribute, value)
        if ((DateTime.parse(value) rescue ArgumentError) == ArgumentError)  
          record.errors[attribute] << (options[:message] || "must be a valid datetime")
        end
      end
    end
    

    3) 모델이 검증을 적용

    class YourModel < ActiveRecord::Base
      validates :happend_at, datetime: true
    end
    

    4) application.rb에 라인 아래 추가

    config.autoload_paths += %W["#{config.root}/app/validators/"]
    

    5) 당신의 레일 응용 프로그램을 다시 시작합니다

    주 : 레일 시험 상기 방법 (4)

  6. ==============================

    6.이 유효성 검사 날짜에 상당히 필요가있다. 기본 레일 헬퍼를 형성하면 9 월 31 일 같은 날짜를 선택할 수 있습니다.

    이 유효성 검사 날짜에 상당히 필요가있다. 기본 레일 헬퍼를 형성하면 9 월 31 일 같은 날짜를 선택할 수 있습니다.

  7. from https://stackoverflow.com/questions/1370926/rails-built-in-datetime-validation by cc-by-sa and MIT license