如何验证(和处理)传递给.to_date的值是有效还是返回错误?

时间:2014-09-23 18:39:16

标签: ruby-on-rails validation date ruby-on-rails-4 error-handling

如果用户插入了to_date方法未接受的值,例如"一些乱码",它返回:

" ArgumentError:无效日期"

如何构建自定义验证,向用户返回验证消息并且不会停止应用程序?

我在考虑重复使用another answer中的代码是一个好主意,但我不知道如何将其应用到to_date

validate do
  self.errors[:start] << "must be a valid date" unless DateTime.parse(self.start) rescue false  
end

2 个答案:

答案 0 :(得分:2)

可以通过救援来实现,然后添加到errors

class Post < ActiveRecord::Base

  validate do |post|
    begin
      Date.parse(post.date)
    rescue ArgumentError
      errors.add(:date, "must be a valid date")
    end
  end

## Another way

  validate do |post|
    # make sure that `date` field in your database is type of `date`
    errors.add(:date, "must be a valid date") unless post.date.try(to_date) 
  end
end

答案 1 :(得分:0)

而不是编写自己的验证(并且必须为它编写测试!)我建议validates_timeliness gem

使用它就像

一样简单
  validates_date :attribute_name