2013-10-19 46 views
2

我有以下定義Rails應用程序(我用Mongoid)內的模型中:爲什麼Ruby的解析「富」到01.01.1970 Date類型

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 

我怎樣才能防止這種行爲,這樣的記錄可以不會被保存,驗證錯誤會顯示給用戶?

感謝您的幫助!

回答

1

您可以修改優惠初始值設定項,以便它將使用Date::parse方法解析您的日期。當您提供給它的參數不是有效的日期格式時,這將引發ArgumentError。

您可能必須將其轉換爲自1.1.1970以來的秒數,因爲這似乎是用於在數據庫中存儲日期的格式。看看這個Date#strftime

+1

好的。但不應該以某種方式由ActiveRecord/Mongoid處理?猜猜這不是一個不常見的情況,用戶可以在文本字段中輸入日期,應用程序需要解析它。 – rit