ruby-on-rails - 尝试显示时间时出现NoMethodError

标签 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)'

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

解决了!谢谢米勒

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

关于ruby-on-rails - 尝试显示时间时出现NoMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27884277/

相关文章:

ruby-on-rails - 如何将 angularjs 资源用于 rails/RESTful 路由?

ruby-on-rails - Rails 3 处理具有固定可能性的属性的最佳实践

sqlite - 如何在 ChangeNotifier 中使用 Futures?

mysql - 将数据从旧数据库转储导入(填充)到新数据库 - Rails

flash - 面向所有用户的带有 Actionscript (AIR) 的 SQLite

javascript - 从 Rails Controller 调用 JS 方法

mongodb - *** NoMethodError异常:未定义的方法 `_id'

ruby-on-rails - 使用 Globalize 的迁移错误

mysql - JRuby on Rails 和 Solr 索引

ruby-on-rails - 嵌套资源的 rails 路由和自定义路由