2

我在 Rails 应用程序中确实有一个具有以下定义的模型(我使用的是 Mongoid):

field :date, type: Date

我将视图中的字段作为 text_field (f.text_field) 包含在内。如果我输入有效日期,一切正常。但是当我在这个字段中输入一些文本(例如'foo')时,日期会被解析为 01.01.1970。我没有手动解析日期,而是使用以下代码:

@offer = Offer.new(offer_params)

我还检查了 Ruby 控制台:

>> offer = Offer.new
...

>> offer.date = 'foo'
"foo"

>> offer.date
Thu, 01 Jan 1970

>> offer.date.is_a? Date
true

如何防止这种行为,以便无法保存记录并向用户显示验证错误?

谢谢你的帮助!

4

1 回答 1

1

您可以修改 Offer 初始化程序,以便它使用Date::parse方法来解析您的日期。当您提供给它的参数不是有效的日期格式时,这将引发 ArgumentError。

您可能必须将其转换为自 1.1.1970 以来的秒数,因为这似乎是用于将日期存储在数据库中的格式。看看Date#strftime

于 2013-10-19T14:41:47.817 回答