Проверка даты в Rails - PullRequest
       18

Проверка даты в Rails

7 голосов
/ 14 апреля 2011

У меня есть модель Active Record, которая содержит два атрибута: start_date и end_date. Как мне проверить следующее:

  1. Даты указаны в правильном формате (гггг-мм-дд)
  2. Это end_date> start_date

Ответы [ 2 ]

21 голосов
/ 14 апреля 2011

Имеет ли значение, в каком формате они хранятся?Объект Date является объектом Date.Вы храните его в столбце даты в БД?

Вот как я делаю проверку:

class MyModel < ActiveRecord::Base
  validate :validate_end_date_before_start_date

  def validate_end_date_before_start_date
    if end_date && start_date
      errors.add(:end_date, "Put error text here") if end_date < start_date
    end
  end
end

Имейте в виду, что это не проверяет нулевые даты ... вы можетеЕсли хотите, можете использовать любой из них.

К вашему сведению, если вы хотите принимать различные форматы, Chronic довольно гибок.

1 голос
/ 14 апреля 2011

Вот как выполнить проверку даты:

Как проверить дату в рельсах?

И, увидев, что дата больше другой, выможно просто использовать операторы больше / меньше чем для объектов даты:

ruby-1.9.2-p136 :006 > d1 = Date.civil(2011, 05, 01)
 => #<Date: 2011-05-01 (4911365/2,0,2299161)> 
ruby-1.9.2-p136 :007 > d2 = Date.civil(2011, 01, 01)
 => #<Date: 2011-01-01 (4911125/2,0,2299161)> 
ruby-1.9.2-p136 :008 > d2 > d1
 => false 
ruby-1.9.2-p136 :009 > d2 < d1
 => true 

Так в вашем примере:

def validate_dates
  errors.add("Created at date", "is invalid.") unless convert_created_at
  errors.add("End Date" , "is invalid") if end_date > start_date
end
...