在类型转换之前显示无效属性

时间:2013-05-13 14:25:57

标签: ruby-on-rails validation

我有一个带有日期属性的模型。我使用[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并显示该日期无效的属性?

1 个答案:

答案 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中你可以做一些像验证,格式化的事情,你可以确定保留旧值或使用新值。