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