Rails:没有无效日期的时间验证

时间:2015-05-19 20:17:22

标签: ruby-on-rails ruby datetime

我在数据库中有一个字段:

t.datetime "start_time"

一个API,允许用户以格式发送日期作为字符串:

  

YYYY-MM-DDTHH:MM:ssTZ

我的问题是当无效日期传递时(但格式正确(例如2015年1月50日)),在验证开始之前抛出ArgumentError: invalid date异常,因此只返回500错误。

我正在考虑覆盖模型中的start_time=start_time方法并挽救该异常,但它似乎有点草率,验证不会那么直接。

我想要一个无效的日期来返回无效的日期验证错误消息,但也可以很好地使用我的状态验证检查,就像start_time一样。

1 个答案:

答案 0 :(得分:1)

为什么不创建一个虚拟属性来存储字符串,然后在自定义验证器中处理转换。这样您就可以在验证中处理ArgumentError并从验证过程中返回错误? e.g。

 class SomeClass < ActiveRecord::Base
   attr_accessor :start_time_temp

   validate :valid_start_time
   validates :start_time, presence: true
   def valid_start_time
     begin 
       self.start_time = start_time_temp
     rescue ArgumentError
       errors.add(:start_time, "is not valid.")
     end
   end
end