【问题标题】: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】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-10-07
          • 2014-05-20
          • 2018-03-31
          • 1970-01-01
          • 1970-01-01
          • 2015-03-03
          • 2011-02-18
          • 1970-01-01
          相关资源
          最近更新 更多