如何处理ActiveRecord中的无效日期

时间:2013-07-10 18:19:04

标签: mysql ruby-on-rails datetime activerecord

我目前正在编写一个Rails应用程序,该应用程序使用已经使用了一段时间的数据库。例如,用于处理数据库的PHP代码能够使用日期时间“1999-00-00”。但是,ActiveRecord似乎不允许我使用该日期格式。

如果不在数据库中实际更改数据,处理此类数据的方法是什么?

有没有一颗宝石可以帮我解决这个问题?

编辑:答案如下。我们更改了数据库。

3 个答案:

答案 0 :(得分:0)

您可以使用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

答案 1 :(得分:0)

假设您想要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

可能?

答案 2 :(得分:0)

好吧,所以公司决定更改数据库中的数据。谢谢你的建议。