尝试显示时间时出现NoMethodError

时间:2015-01-11 05:30:23

标签: ruby-on-rails sqlite ruby-on-rails-4 activerecord error-handling

我对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

1 个答案:

答案 0 :(得分:2)

时区应该在 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
相关问题