在模型中验证DateTime格式

时间:2011-12-22 16:57:27

标签: ruby-on-rails ruby-on-rails-3

我正在为带有开始列的模型添加验证,该列输入为 datetime

目前我只使用 date_select 表单帮助器,但是如果我决定将来要使用时间值,则将列类型保留为datetime。

我目前正在使用:

validates :start, :presence => true

但我想知道是否有:format =>这将确保我收到日期。我知道有人不太可能改变周围的选择框,但我认为你不能太小心,对吧?

2 个答案:

答案 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