尝试显示时间时出现 NoMethodError

a NoMethodError when trying to display time

我在使用 rails 时遇到了一个独特的问题。我目前正在尝试 运行 此代码..

<%= trip.start_date.strftime("%b %d %I:%M %p") %> 

当我将框架时区设置为 UTC 时,它会正确输出 start_date。但是,当我将时区更改为 EST/EDT 时,会出现 NoMethodError for nil:NilClass 错误。

当我检查行程数据库时,它正确地存储了 start_date 的时间,但似乎不想对其进行格式化或显示。

希望这是有道理的,谢谢!

编辑: 另外,在 application.rb 我写了

config.time_zone = 'Eastern Time (US & Canada)'
config.active_record.default_timezone = 'Eastern Time (US & Canada)'

然后,我重置了数据库,然后重置了服务器。

已解决!感谢 Miler

我把config.active_record.default_timezone = 'Eastern Time (US & Canada)'改成了config.active_record.default_timezone = :local

application.rb

中的时区应该这样设置
module Spatravlr
  class Application < Rails::Application
     # code
     config.time_zone = 'Eastern Time (US & Canada)'
  end
end

接下来,让应用程序控制 nil 个案例,以便我们处理错误。

<%= trip.start_date.try(:strftime, "%b %d %I:%M %p") %>

鉴于 trip 属性似乎是迭代器的一部分,此修复程序还应在打印出时间时显示哪个 start_datenil

此外,您不需要:

 config.active_record.default_timezone = 'Eastern Time (US & Canada)'

我相信从 Rails 3.2 开始,它接受 :local:utc。因此,您可以设置不声明它(删除该行),或者像这样设置它:

config.active_record.default_timezone = :local