如何将日期格式化为 rails 应用程序模型中的多个字段?

how format date to multiple fields in the model in the rails app?

我在 rails 中有一个表单,它有一个带有输入掩码的日期字段,格式为 mm/dd/yyyy,但在保存它的那一刻,由于格式模型是 dd/mm/yyyy。我找到了一个可能可行的解决方案。

 def organization_date=(val)
   date = Date.strptime(val, “%m/%d/%Y”) if val.present?
   write_attribute(:organization_date, date)
 end

但我需要一个更优雅的解决方案,因为我有更多日期类型的字段,我不能对每个字段都这样做,更新格式以输入掩码到 dd/mm/yyyy 也不是一个选项,因为客户的要求是格式 mm/dd/yyyy

我正在使用 Rails 6.0 beta

我很感激任何有助于解决这个问题的想法

在您的 config/initializers/ 中创建 date_format.rb:

# Date
Date::DATE_FORMATS[:default] = "%m/%d/%Y" 

然后重新启动 rails 服务器..

您可以将活动记录默认配置为此格式,但我建议采用以下解决方案。这样您就可以轻松地在整个应用程序中设置日期格式。

猴子补丁日期 class 像这样:

# config/initializers/date.rb

class Date
  def to_fd
    strftime('%m/%d/%Y')
  end
end

用法:

Date.today.to_fd
=> "05/28/2019"

我认为最好的修复方法是,在 config/initializers/date_format.rb

中创建一个文件
module Typecasting
  module Date
    def cast_value v
      ::Date.strptime v, "%m/%d/%Y" rescue super
    end
  end

  ::ActiveRecord::Type::Date.prepend Date
end