Rails 3.2 - 验证日期格式

时间:2012-03-20 12:40:31

标签: ruby validation ruby-on-rails-3.2

我的模型Teacher包含字段:teacher_birthday。我从视图中获得:teacher_birthday(单个文本框)。我想确保输入日期具有这样的格式 - dd.mm.yyyy(我的意思是我想确定,输入日期为12.24.1991不会保存在db中,因为这样的日期是错误的)并且这个日期存在。另外,我想在MODEL中这样做。这可能吗?

2 个答案:

答案 0 :(得分:1)

尝试 chronic gem。它具有非常灵活的日期解析,包括您正在寻找的内容:

[11] pry(main)> require 'chronic'
=> true
[12] pry(main)> Chronic.parse('24.12.1991'.gsub('.','-'))
=> 1991-12-24 12:00:00 -0700

答案 1 :(得分:0)

声明要在模型中调用的验证方法,然后定义此方法。以下内容应大致按照您的要求进行:

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