我正在为带有开始列的模型添加验证,该列输入为 datetime
目前我只使用 date_select 表单帮助器,但是如果我决定将来要使用时间值,则将列类型保留为datetime。
我目前正在使用:
validates :start, :presence => true
但我想知道是否有:format =>这将确保我收到日期。我知道有人不太可能改变周围的选择框,但我认为你不能太小心,对吧?
答案 0 :(得分:10)
这取决于您要接受的日期格式。
f.e。
validates :start, :presence => true, :format => /(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d/
对于dd-mm-yyyy为dateformat。
Google for date regexp!
由于我的回答是downvoted,我再试一次:
validate do
self.errors[:start] << "must be a valid date" unless (DateTime.parse(self.start) rescue false)
end
答案 1 :(得分:1)
您可以查看validates_timeliness gem。
这个gem可以实现一些有用的日期和时间关系验证。在您的情况下,您可以使用它来验证您的start
属性,如下所示:
class Task < ActiveRecord::Base
validates_datetime :start
# or
validates :start, presence: true, timeliness: {type: :datetime}
end