[RUBY-ON-RAILS] 날짜 검증에 내장 된 레일
RUBY-ON-RAILS날짜 검증에 내장 된 레일
레일은 날짜에 대한 검증을 할 수 있습니까? 나는 플러그인을 발견 http://github.com/adzap/validates_timeliness/tree/master, 하지만 상자 밖으로 와서해야 뭔가처럼 보인다.
해결법
-
==============================
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.게이브의 대답은 그래서 여기 내 날짜를 확인하기 위해 무슨 짓을했는지, 나를 위해 작동하지 않았다 :
게이브의 대답은 그래서 여기 내 날짜를 확인하기 위해 무슨 짓을했는지, 나를 위해 작동하지 않았다 :
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.잘못된 값은 사용자 정의 유효성 검사기에 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.나는 보석 date_validator을 추천합니다. https://rubygems.org/gems/date_validator를 참조하십시오. 그것은 잘 유지되고 그 API는 간단하고 컴팩트하다.
나는 보석 date_validator을 추천합니다. https://rubygems.org/gems/date_validator를 참조하십시오. 그것은 잘 유지되고 그 API는 간단하고 컴팩트하다.
-
==============================
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.이 유효성 검사 날짜에 상당히 필요가있다. 기본 레일 헬퍼를 형성하면 9 월 31 일 같은 날짜를 선택할 수 있습니다.
이 유효성 검사 날짜에 상당히 필요가있다. 기본 레일 헬퍼를 형성하면 9 월 31 일 같은 날짜를 선택할 수 있습니다.
from https://stackoverflow.com/questions/1370926/rails-built-in-datetime-validation by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 레일 2 : Model.find (1) ID 1이 존재하지 않는 액티브 오류를 제공합니다 (0) | 2020.02.14 |
---|---|
[RUBY-ON-RAILS] 왜`아무것도 할 것 config.time_zone`하지 않는 이유는 무엇입니까? (0) | 2020.02.14 |
[RUBY-ON-RAILS] 어떻게 카피 바라의 URL에 POST합니까? (0) | 2020.02.14 |
[RUBY-ON-RAILS] LEFT OUTER 레일에 가입 4 (0) | 2020.02.14 |
[RUBY-ON-RAILS] ActionController :: Base.relative_url_root에 대한 대체 무엇입니까? (0) | 2020.02.14 |