【问题标题】:How to deal with Invalid Date in ActiveRecord如何处理 ActiveRecord 中的无效日期
【发布时间】:2013-07-10 18:19:03
【问题描述】:
我目前正在编写一个使用已使用一段时间的数据库的 Rails 应用程序。例如,用于处理数据库的 PHP 代码能够使用“1999-00-00”的日期时间。但是,ActiveRecord 似乎不允许我使用该日期格式。
在不实际更改数据库的情况下处理此类数据的方法是什么?
有没有我尚未发现的可以帮助解决此问题的宝石?
编辑:答案如下。我们更改了数据库。
【问题讨论】:
标签:
mysql
ruby-on-rails
datetime
activerecord
【解决方案1】:
您可以使用 Rails i18n 来格式化和显示日期:
I18n.localize(Time.now) # using :default format
I18n.localize(Time.now, :format => :short) # using short format
I18n.localize(Date.today) # using :default format
I18n.localize(Date.today, :format => :short) # using short format
【解决方案2】:
假设你想要 1900 年 1 月 1 日,你可以这样做:
>> your_field_before_type_cast = '1900-00-00'
=> "1900-00-00"
>> date = begin; Date.parse(your_field_before_type_cast); rescue ArgumentError; your_field_before_type_cast =~ /^(\d+)-/; Date.new($1.to_i, 1, 1); end
=> #<Date: 1900-01-01 ((2415021j,0s,0n),+0s,2299161j)>
这样会在你的模型中显示为
def your_field
Date.parse your_field_before_type_cast
rescue ArgumentError
your_field_before_type_cast =~ /^(\d+)-/
Date.new($1.to_i, 1, 1)
end
也许?
【解决方案3】:
好的,所以公司决定更改数据库中的数据。谢谢大家的建议。