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

Ruby on rails 如何在rails应用程序中将日期格式化为模型中的多个字段?,ruby-on-rails,date,model,input-mask,Ruby On Rails,Date,Model,Input Mask,我在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 但我需要一个更优雅的解决方案,

我在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
但我需要一个更优雅的解决方案,因为我有更多类型为date的字段,而我不能为每个字段都这样做,而且更新格式以将输入掩码更新为dd/mm/yyyy也不是一个选项,因为客户的要求是格式为mm/dd/yyyy

我正在使用Rails 6.0测试版

我非常感谢您在config/initializers/create date_format.rb中提出的任何有助于解决此问题的想法:


然后重新启动rails服务器。

您可以将active record default配置为此格式,但我建议采用以下解决方案。因此,您可以轻松地在应用程序的各个方面设置日期格式

猴子补丁日期类如下:

# 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

我已经尝试修改Date:Date\u格式[:default],但是我只在显示日期时得到了很好的结果,但在使用活动记录将日期保存到数据库时却没有得到很好的结果:尝试以下操作:Date::Date\u格式[:db]=%m-%d-%yi如果上述方法也不起作用,请将gem慢性添加到您的gem文件中,然后按照以下步骤操作:
module Typecasting
  module Date
    def cast_value v
      ::Date.strptime v, "%m/%d/%Y" rescue super
    end
  end

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