0

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

4

1 回答 1

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您可以执行验证、格式化等操作,您可以决定保留旧值还是使用新值。

于 2013-05-14T19:06:49.053 回答