我有一个带有日期属性的模型。我使用[attribute] _before_type_cast构建了一个自定义验证,以便像'31 .02.2013'这样的日期使验证失败。
问题在于:
@invoice.order_date = '31.02.2013'
@invoice.order_date #=> Sun Mar 03 00:00:00 +0100 2013
因此,在视图层上,用户会收到有关无效日期的消息,但无效属性会自动更改为03.03.2013,这实际上是一个正确的日期,因此它有点无意义。
有没有办法停止该type_cast并显示该日期无效的属性?
答案 0 :(得分:1)
我认为您可以创建自定义setter方法来阻止更改属性。
def order_date=(date)
date = your_validate_and_format_method(date)
self.send(:write_attribute, :order_date, date)
end
在your_validate_and_format_method
中你可以做一些像验证,格式化的事情,你可以确定保留旧值或使用新值。