2016-03-17 4 views
0

Я создаю простую проверку внутри своей модели, которая проверяет, есть ли дата (to_date) до текущей даты.strptime error with Rails 4

Формат, который представляет пользователь to_date, составляет %m/%d/%Y или, например, 03/15/2016.

Моя проблема, рельсы бросает мне ошибку invalid date, хотя я проверил три раза, что дата находится в правильном формате.

Вот моя проверка:

validate :date_not_before_now 

def date_not_before_now 
    if Date.strptime(self.to_date, '%m/%d/%Y').strftime("%Y-%m-%d") < Time.now.localtime.strftime("%Y-%m-%d") 
    errors.add(:dates, "should not be in the past.") 
end 

конец

Любая помощь выяснить, почему это не работает будет высоко ценится.

ответ

0

попробовать это при проверке даты

validates :date_field, presence: true, date: {on_or_before: :today} 

def today 
    Date.today 
end 
+0

Благодарим за предложение, но on_or_before не будет работать в моем случае, так как 'to_date' является строкой, а не datetime. – Kathan

0

Вы можете попробовать это.

validate :date_not_before_now 

def date_not_before_now 
    if (Date.strptime(self.to_date, '%m/%d/%Y') < Time.now.localtime.to_date) 
    errors.add(:dates, "should not be in the past.") 
    end 
end 

Пробовал в консоли и работал следующим образом, например:

Date.strptime("03/15/2016", '%m/%d/%Y') < Time.now.localtime.to_date 
## Output 
=> true