如何识别 rails 中的无效日期?
How do I recognize invalid dates in rails?
当修改 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
你可以尝试解析它,当它引发错误时它是无效的:
valid = Date.parse('2015-01-30').present? rescue false # true
valid = Date.parse('2015-01-32').present? rescue false # false
如果没有办法告诉 activerecord
不要丢弃值,并且没有 public 接口来检查日期是否有效,那么最好的选择必须是使用 validation :
class Task < ActiveRecord::Base
validates_date :date
end
当修改 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
你可以尝试解析它,当它引发错误时它是无效的:
valid = Date.parse('2015-01-30').present? rescue false # true
valid = Date.parse('2015-01-32').present? rescue false # false
如果没有办法告诉 activerecord
不要丢弃值,并且没有 public 接口来检查日期是否有效,那么最好的选择必须是使用 validation :
class Task < ActiveRecord::Base
validates_date :date
end