Rails 从 6.1 升级到 7.0 后忽略默认日期格式

2024-01-08

我们的应用程序之前将默认日期格式定义为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约会时。您的日期不会达到您配置的默认格式化程序。

我不确定这是否是故意的。

您有两种选择来解决此问题:

  1. 找到您需要以所选格式显示日期的所有位置并添加.to_fs。这可能是解决此问题的更正确方法。
  2. 或者做我们所做的事情并违背 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(使用前将#替换为@)

Rails 从 6.1 升级到 7.0 后忽略默认日期格式 的相关文章

随机推荐

  • 缺少 JavaFX 应用程序类

    我有这样的java代码 package mypackage import javafx application Application import javafx stage Stage public class MyApp extends
  • 创建函数App时出现“该区域不允许进行缩放操作”的错误

    我正在运行构建中的各个步骤Azure 中的无服务器 Web 应用程序 https learn microsoft com en us azure functions tutorial static website serverless ap
  • gzip/deflate 失败时抛出异常

    我在 ASP NET MVC 3 中的 gzip deflate ActionFilterAttribute 中遇到了一个有趣的问题 如果我的应用程序抛出异常 我不会得到 YSOD 而是得到一整页的乱码 如下所示 I m J J t iG
  • 如何删除网格布局小部件内的所有小部件并以相同的顺序重新创建所有小部件

    这是我之前的问题的延续 如何从左上角开始将小部件添加到网格布局 谢谢X Jacobs解决 tat 问题 现在我想删除所有这些小部件并以相同的顺序重新创建相同的小部件 就像刷新小部件库一样 谢谢 好的 这是我的 ui 当我单击 createP
  • 如何从包名称中获取应用程序的图标?

    我尝试了堆栈溢出的各种解决方案 但没有成功 我想要的是 我知道不同应用程序的包名称 我想从这些包名称中获取应用程序图标 在图像视图中显示这些图标 例如我有一个包名com example testnotification 如何获取此应用程序图
  • jQuery 单击停止传播

    我有一个简单的设置 一个表格 其单元格内有复选框 我有两个事件 一个事件响应单击复选框 另一个事件响应单击 tr 元素 当我单击复选框时 我不希望触发表行事件 我试过了event stopPropagation and return fal
  • 文本框的实时绑定属性更改[重复]

    这个问题在这里已经有答案了 我有一个TextBox控件绑定到我的视图模型中的属性 当前行为的工作方式是视图模型只会收到通知 其中的文本TextBox控件失去焦点后进行修改 每当TextBox实时改变状态 它附加到我的视图模型中的一个属性 用
  • 如何将键值对附加到 iPhone 上的 UIView?

    当我开始 iPhone 开发时 我在某处读到可以将键值对附加到 UIView 我知道所有 UIView 都可以用作字典来存储您可能想要附加到它们的任何数据 以防止不必要的子类化 然而 我到处寻找参考 并尝试自己实现该行为 但徒劳无功 我尝试
  • PowerMockito - 如何将whenNew()与类型化列表一起使用?

    我希望 PowerMockito 返回我的空数组列表Foos when new ArrayList
  • 根据 UIBezierPath 移动 UIView [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 I ve a UI贝塞尔路径画这个 我希望红点在蓝色路径上无限移动 从右到左 从左到右 我怎样才能做到这一点 您可以使用CAKeyFr
  • 我应该选择 IEnumerable 还是数组? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在我从事的许多项目中 每当我必须返回只读集合时 我都会使用IEnumerable
  • HTML 表单提交按钮的字体大小无法更改

    如何增加提交按钮的字体大小 特别是在 Chrome 中 它太小并且文本看起来被压扁 工作小提琴 http jsfiddle net xhf4bLnd body input font size 30px 我知道有 webkit appeara
  • 获取 WKWebView 中静态页面的最终渲染高度

    在我的应用程序中 我使用的是WKWebView它加载带有静态内容的网页 我想知道 的高度contentSize一旦网页完全呈现在WKWebView 所以我想我可以使用webView didFinishNavigation 代表 import
  • Google Apps 脚本最大执行时间问题

    我是编码新手 最近我创建了一个 Google 脚本 基于其他两个脚本 它执行以下操作 按主题行搜索 Gmail 草稿 获取 Gmail 草稿并将其用作模板来创建带有唯一附件的多个草稿 创建草稿后添加确认短语 这是代码 Change thes
  • 读取 Excel 并将其显示在表格视图上。使用二维数组或列表列表填充 TableView

    我的目标是读取 Excel 我可以通过 Apache POI 读取 并在 TableView JavaFX 上显示 Excel 我能够在上显示列名称TableView 但无法在这些列中填充数据 对于我发现的许多可用资源 有一个一般示例 其中
  • 在 Python 中向 Minecraft 服务器发送登录数据包不起作用

    我有以下 Python 脚本 它的作用是尝试连接到 MineCraft 服务器 首先发送 握手 然后发送登录请求 协议规范可以在这里找到 http wiki vg 协议 http wiki vg Protocol 无论如何 python 脚
  • Python多重处理:AttributeError:'Test'对象没有属性'get_type'

    简短的简短版本 我在并行化使用实例方法的代码时遇到问题 更长的版本 此 python 代码产生错误 Error Traceback most recent call last File Users gilzellner dev git 3
  • IE8 不动态应用 css 显示

    我正在尝试开发一个在给定值上隐藏其列的表 我正在使用中讨论的解决方案另一个问题 https stackoverflow com questions 2858339 show hide html table columns using css
  • Kotlin 和 WebSockets [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在制作一个小型服务器端应用程序 它将通过 WebSockets 与浏览器通信 并正在考虑用 Kotl
  • Rails 从 6.1 升级到 7.0 后忽略默认日期格式

    我们的应用程序之前将默认日期格式定义为DD MM YYYY in config application rb像这样 Date DATE FORMATS default d m Y 这在 Rails 6 1 中按预期工作 但升级到 Rails