我们的应用程序之前将默认日期格式定义为DD/MM/YYYY
in config/application.rb
像这样:
Date::DATE_FORMATS[:default] = '%d/%m/%Y'
这在 Rails 6.1 中按预期工作,但升级到 Rails 7.0 后,它现在似乎被忽略了.to_s
:
Loading development environment (Rails 7.0.2.2)
3.0.1 :001 > Date::DATE_FORMATS[:default]
=> "%d/%m/%Y"
3.0.1 :002 > Date.new(2022, 12, 31).to_s
=> "2022-12-31"
3.0.1 :003 > Date.new(2022, 12, 31).to_fs
=> "31/12/2022"
我怎样才能拥有.to_s
在 Rails 7.0+ 中实现此行为吗?
记住,config.active_support.disable_to_s_conversion
不恢复原来的功能to_s
约会时。您的日期不会达到您配置的默认格式化程序。
我不确定这是否是故意的。
您有两种选择来解决此问题:
- 找到您需要以所选格式显示日期的所有位置并添加
.to_fs
。这可能是解决此问题的更正确方法。
- 或者做我们所做的事情并违背 Rails 开发人员的意愿。添加一个覆盖的初始值设定项
.to_s
约会的方法,因为要去 9000 多个不同的地点添加.to_fs
代码中显示的每个日期对于您现在来说实在是太多了。
./config/initializers/date_format_fix.rb
require "date"
class Date
def to_s(format = :default)
if formatter = DATE_FORMATS[format]
if formatter.respond_to?(:call)
formatter.call(self).to_s
else
strftime(formatter)
end
else
to_default_s
end
end
end
同样可以用Time
and DateTime
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)