我在数据库中有一个字段:
t.datetime "start_time"
一个API,允许用户以格式发送日期作为字符串:
YYYY-MM-DDTHH:MM:ssTZ
我的问题是当无效日期传递时(但格式正确(例如2015年1月50日)),在验证开始之前抛出ArgumentError: invalid date
异常,因此只返回500错误。
我正在考虑覆盖模型中的start_time=
和start_time
方法并挽救该异常,但它似乎有点草率,验证不会那么直接。
我想要一个无效的日期来返回无效的日期验证错误消息,但也可以很好地使用我的状态验证检查,就像start_time
一样。
答案 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