如何识别rails中的无效日期?

时间:2015-04-21 22:03:02

标签: ruby-on-rails rails-activerecord

修改Active Record对象的属性(如Task.update date: '2015-01-01')时,我想知道该值何时无效('2015-01-32''whatever')。现在,activerecord只是写nil以防万一,我不得不说非常友好。以前的值丢失了。如果用户没有像日期那样输入任何内容,我想把它留在那里。

有没有更明智的方法来解决这个问题?

if ActiveRecord::Attribute.from_user('date', '2015-01-32', ActiveRecord::Type::Date.new).value
  puts 'valid date'
end

P.S。以防someone wantsknow how type casting happens

2 个答案:

答案 0 :(得分:1)

如果没有办法告诉activerecord不丢弃值,并且没有公共接口来检查日期是否有效,那么最好的选项必须是使用validation:< / p>

class Task < ActiveRecord::Base
  validates_date :date
end

答案 1 :(得分:0)

你可以尝试解析它,当它引发错误时它就无效了:

valid = Date.parse('2015-01-30').present? rescue false  # true

valid = Date.parse('2015-01-32').present? rescue false  # false