[RUBY-ON-RAILS] 어떻게 레일에서 날짜를 확인합니까?
RUBY-ON-RAILS어떻게 레일에서 날짜를 확인합니까?
내가 루비 레일에 내 모델의 날짜를 확인하고자하지만, 일, 월, 연도 값은 이미 그들이 내 모델에 도달하는 시간에 의해 잘못된 날짜로 변환됩니다.
내가보기에 2009 2월 31일 입력하면 내가 Model.new (PARAMS [: 모델])을 사용하는 경우 예를 들어, 내 컨트롤러, 그것은 나의 모델은 다음 유효한 날짜로 본다 "2009년 3월 3일"로 변환 어떤 이는이지만, 그것은 잘못된 것입니다.
내 모델이 검증을 할 수 있도록하고 싶습니다. 내가 할 수있는, 또는 내가이 완전히 잘못에 대해 갈거야 그 방법이 있습니까?
나는 문제에 대해 설명이 "날짜 확인"을 발견하지만 결코 해결되지 않았다.
해결법
-
==============================
1.난 당신이 날짜에 대한 태그를 생성하는 date_select 도우미를 사용하고 추측하고 있습니다. 당신이 그것을 할 수있는 또 다른 방법은 일, 월, 년 필드 선택 폼 헬퍼를 사용하는 것입니다. 이처럼 (내가 사용 예제 created_at 날짜 필드) :
난 당신이 날짜에 대한 태그를 생성하는 date_select 도우미를 사용하고 추측하고 있습니다. 당신이 그것을 할 수있는 또 다른 방법은 일, 월, 년 필드 선택 폼 헬퍼를 사용하는 것입니다. 이처럼 (내가 사용 예제 created_at 날짜 필드) :
<%= f.select :month, (1..12).to_a, selected: @user.created_at.month %> <%= f.select :day, (1..31).to_a, selected: @user.created_at.day %> <%= f.select :year, ((Time.now.year - 20)..Time.now.year).to_a, selected: @user.created_at.year %>
그리고 모델에서, 당신은 날짜를 확인 :
attr_accessor :month, :day, :year validate :validate_created_at private def convert_created_at begin self.created_at = Date.civil(self.year.to_i, self.month.to_i, self.day.to_i) rescue ArgumentError false end end def validate_created_at errors.add("Created at date", "is invalid.") unless convert_created_at end
당신이 플러그인 솔루션을 찾고 있다면, 나는 validates_timeliness 플러그인을 체크 아웃 할 것입니다. 그것은합니다 (GitHub의 페이지에서) 같이 작동합니다 :
class Person < ActiveRecord::Base validates_date :date_of_birth, on_or_before: lambda { Date.current } # or validates :date_of_birth, timeliness: { on_or_before: lambda { Date.current }, type: :date } end
다음과 같이 사용할 수 검증 방법의 목록은 다음과 같습니다 :
validates_date - validate value as date validates_time - validate value as time only i.e. '12:20pm' validates_datetime - validate value as a full date and time validates - use the :timeliness key and set the type in the hash.
-
==============================
2.만성 보석을 사용하여 :
만성 보석을 사용하여 :
class MyModel < ActiveRecord::Base validate :valid_date? def valid_date? unless Chronic.parse(from_date) errors.add(:from_date, "is missing or invalid") end end end
-
==============================
3.당신이 원하는 경우 레일 3 루비 1.9 호환성은 date_validator 보석을 시도해보십시오.
당신이 원하는 경우 레일 3 루비 1.9 호환성은 date_validator 보석을 시도해보십시오.
-
==============================
4.액티브 레코드는 타입 캐스팅하기 전에 원시 속성 데이터를 포함하는 속성 _before_type_cast을 제공합니다. 이 전 배역 값과 오류 메시지를 반환하거나 배역 후 불가능 검증을 수행하는 데 유용 할 수 있습니다.
액티브 레코드는 타입 캐스팅하기 전에 원시 속성 데이터를 포함하는 속성 _before_type_cast을 제공합니다. 이 전 배역 값과 오류 메시지를 반환하거나 배역 후 불가능 검증을 수행하는 데 유용 할 수 있습니다.
접근 유효성 검사를 수행하는 것은 약간 접근 계약을 변경하기 때문에 나는 접근을 재정의 다니엘 폰 Fange의 제안에서 멀리 부끄러워 것입니다. 액티브 레코드는이 상황에 대해 명시 적으로 기능이 있습니다. 그걸 써.
-
==============================
5.이 모델의 날짜로 변환되기 전에 날짜 문자열을 처리해야하기 때문에, 그 필드에 대한 접근을 무시할 것
이 모델의 날짜로 변환되기 전에 날짜 문자열을 처리해야하기 때문에, 그 필드에 대한 접근을 무시할 것
하자 당신의 날짜 필드가 published_date 말한다. 모델 객체에이 추가 :
def published_date=(value) # do sanity checking here # then hand it back to rails to convert and store self.write_attribute(:published_date, value) end
-
==============================
6.A는 후반 여기 비트,하지만 덕분에 "어떻게 레일에서 날짜를 확인합니까?" 나는이 유효성 검사기를 작성 관리, 희망은 누군가에게 유용합니다 :
A는 후반 여기 비트,하지만 덕분에 "어떻게 레일에서 날짜를 확인합니까?" 나는이 유효성 검사기를 작성 관리, 희망은 누군가에게 유용합니다 :
당신의 model.rb 내부
validate :date_field_must_be_a_date_or_blank # If your field is called :date_field, use :date_field_before_type_cast def date_field_must_be_a_date_or_blank date_field_before_type_cast.to_date rescue ArgumentError errors.add(:birthday, :invalid) end
-
==============================
7.여기에 비 만성 대답이다 ..
여기에 비 만성 대답이다 ..
class Pimping < ActiveRecord::Base validate :valid_date? def valid_date? if scheduled_on.present? unless scheduled_on.is_a?(Time) errors.add(:scheduled_on, "Is an invalid date.") end end end
-
==============================
8.(사용자 정의 선택을 사용하는 경우 PARAMS에 액세스 할 수있는 컨트롤러의 메소드의 어딘가에서) 당신은 너무 같은 날짜와 시간을 확인할 수 ...
(사용자 정의 선택을 사용하는 경우 PARAMS에 액세스 할 수있는 컨트롤러의 메소드의 어딘가에서) 당신은 너무 같은 날짜와 시간을 확인할 수 ...
# Set parameters year = params[:date][:year].to_i month = params[:date][:month].to_i mday = params[:date][:mday].to_i hour = params[:date][:hour].to_i minute = params[:date][:minute].to_i # Validate date, time and hour valid_date = Date.valid_date? year, month, mday valid_hour = (0..23).to_a.include? hour valid_minute = (0..59).to_a.include? minute valid_time = valid_hour && valid_minute # Check if parameters are valid and generate appropriate date if valid_date && valid_time second = 0 offset = '0' DateTime.civil(year, month, mday, hour, minute, second, offset) else # Some fallback if you want like ... DateTime.current.utc end
-
==============================
9.당신은 validates_date_time 플러그인을 시도 해 봤나?
당신은 validates_date_time 플러그인을 시도 해 봤나?
from https://stackoverflow.com/questions/597328/how-do-i-validate-a-date-in-rails by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] AngularJS와 : 숫자 만 텍스트 상자에 입력 할 수 있습니다 (0) | 2020.02.08 |
---|---|
[RUBY-ON-RAILS] TZInfo :: DataSourceNotFound 오류 Windows에서 레일 v4.1.0 서버 시작 (0) | 2020.02.08 |
[RUBY-ON-RAILS] 수정 트위터 부트 스트랩 네비게이션 바 (0) | 2020.02.08 |
[RUBY-ON-RAILS] 사용자 정의 필드 / 레일과 고안 열 추가 4 (0) | 2020.02.08 |
[RUBY-ON-RAILS] 어떻게 레일 인스턴스 변수는 뷰에 전달된다? (0) | 2020.02.08 |