Rails 3.2 - проверить формат даты - PullRequest
0 голосов
/ 20 марта 2012

У меня есть модель Teacher с полем :teacher_birthday. Я получаю :teacher_birthday из вида (одно текстовое поле). Я хочу убедиться, что входная дата имеет такой формат - dd.mm.yyyy (я имею в виду, я хочу быть уверенным, что входная дата как 12.24.1991 не будет сохранена в БД, потому что такая дата неверна) и что эта дата существует. Также я хочу сделать это в МОДЕЛИ. Это возможно?

Ответы [ 2 ]

1 голос
/ 20 марта 2012

Попробуйте хронический драгоценный камень. Он имеет очень гибкий анализ даты, включая то, что вы ищете:

[11] pry(main)> require 'chronic'
=> true
[12] pry(main)> Chronic.parse('24.12.1991'.gsub('.','-'))
=> 1991-12-24 12:00:00 -0700
0 голосов
/ 20 марта 2012

Объявите метод проверки, который будет вызван в вашей модели, а затем определите этот метод.Следующее должно примерно делать то, что вам нужно:

validate :validate_teacher_birthday

private

def validate_teacher_birthday
  errors.add("Teacher birthday", "is invalid.") unless (check_valid_date && valid_date_format)
end

def valid_date_format
  self.teacher_birthday.match(/[0-9][0-9].[0-9][0-9].[0-9][0-9][0-9][0-9]/)
end

def check_valid_date
  begin
    parts = self.teacher_birthday.split(".") #contains array of the form [day,month,year]
    Date.civil(parts[2].to_i,parts[1].to_i,parts[0].to_i)
  rescue ArgumentError
    #ArgumentError is thrown by the Date.civil method if the date is invalid
    false
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...