默认情况下,我们的Rails应用程序显示日期时间如下所示2023年01月08日星期日16:52:46.610977000 UTC +00:00当检查一个时间对象时,Rails控制台也会显示这一点。有没有可能设置一个不同的日期时间格式,只为Rails控制台?
a0x5cqrl1#
该格式是TimeWithZone#inspect的输出,它是硬编码的:
TimeWithZone#inspect
# File activesupport/lib/active_support/time_with_zone.rb, line 150 def inspect "#{time.strftime('%a, %d %b %Y %H:%M:%S.%9N')} #{zone} #{formatted_offset}" end
字符串但是Rails提供了一个console块来注册代码,这些代码只有在运行Rails控制台时才会执行(在config.console的文档中偶然提到)。你可以在运行console时使用它来提供你自己的inspect方法,例如:
console
config.console
inspect
# config/application.rb module YourApp class Application < Rails::Application console do # this block is called only when running console class ActiveSupport::TimeWithZone def inspect time.strftime('%Y-%m-%d %H:%M:%S') end end end end end
$ bin/rails console Loading development environment (Rails 7.0.6) irb(main):001:0> Time.current => 2023-07-20 12:36:10
的数据其他rails执行上下文不受影响:
$ bin/rails runner 'p Time.current' Thu, 20 Jul 2023 12:38:47.934270000 CEST +02:00
型请注意,Time.current是一个Rails方法,它(通常)返回ActiveSupport::TimeWithZone的示例,而不是Ruby内置的Time类的示例。虽然Rails没有改变Time#inspect,但它改变了Ruby内置类Date和DateTime的inspect方法,以使它们更具可读性,请参阅core_ext/date/conversions.rb和core_ext/date_time/conversions.rb。如果需要,您也可以通过修补这些类来提供自己的inspect实现以供控制台使用。但请记住,修补类和更改现有行为总是有破坏某些东西的风险。
Time.current
ActiveSupport::TimeWithZone
Time
Time#inspect
Date
DateTime
core_ext/date/conversions.rb
core_ext/date_time/conversions.rb
1条答案
按热度按时间a0x5cqrl1#
该格式是
TimeWithZone#inspect
的输出,它是硬编码的:字符串
但是Rails提供了一个
console
块来注册代码,这些代码只有在运行Rails控制台时才会执行(在config.console
的文档中偶然提到)。你可以在运行console时使用它来提供你自己的inspect
方法,例如:的数据
其他rails执行上下文不受影响:
型
请注意,
Time.current
是一个Rails方法,它(通常)返回ActiveSupport::TimeWithZone
的示例,而不是Ruby内置的Time
类的示例。虽然Rails没有改变
Time#inspect
,但它改变了Ruby内置类Date
和DateTime
的inspect
方法,以使它们更具可读性,请参阅core_ext/date/conversions.rb
和core_ext/date_time/conversions.rb
。如果需要,您也可以通过修补这些类来提供自己的inspect
实现以供控制台使用。但请记住,修补类和更改现有行为总是有破坏某些东西的风险。