【问题标题】:NoMethodError for time_zone_select in a form表单中 time_zone_select 的 NoMethodError
【发布时间】:2011-03-02 22:41:38
【问题描述】:

我已经完全按照Railscasts Time Zone Episode 1 设置了我的应用程序,但是当我运行时

<%= f.time_zone_select :time_zone, ActiveSupport::TimeZone.us_zones %>

我收到此错误

用户中的 NoMethodError#new

显示 app/views/users/new.html.erb 提出第 27 行的位置:

当你没有时你有一个 nil 对象 期待它!你可能已经预料到了 数组的实例。发生错误 在评估 nil 时。

第 27 行是上述行。我真的被困在这个...

【问题讨论】:

  • 您能检查一下ActiveSupport::TimeZone.us_zones 在控制台中给出的内容吗?
  • [#<:timezone:0x7112460>

标签: ruby-on-rails timezone activesupport


【解决方案1】:

我遇到了同样的问题,导致我的一个 Cucumber 测试失败。我升级到 Rails 2.3.9(从 2.3.8)并且所有测试都通过了。祝你好运!

【讨论】:

    【解决方案2】:

    是的,这是 2.3.8 中的错误,已在上述工单中修复。

    这可能是由于数据库字段中存储的时区与 Rails 或 TZInfo 知道的任何时区都不对应。在我们的例子中,它被意外的 HTML 编码 & 符号绊倒了,所以 Pacific Time (US &amp;amp; Canada) 变成了 Pacific Time (US &amp;amp; Canada)http://github.com/rails/rails/commit/78e4d88c7071c633ee1eb68f49b90719aa198eaa 应该可以解决它,但您可能需要返回并确保您的数据库中没有任何不良数据。

    【讨论】:

      【解决方案3】:

      我也有同样的问题。它似乎与 Rails 2.3.8 有关,因为如果我恢复到以前的版本(2.3.4,通过在 /config/environment.rb 中进行设置),一切正常。看起来像一个错误。我正在检查此错误报告和生成的补丁是否可以解决此问题:https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/4942-activesupporttimezone-incorrectly-stores-bogus-values-in-zones_map#ticket-4942

      【讨论】:

      • 我确实认为这也是一个错误。我真的不记得我做了什么来解决这个问题,但我最终做到了。我正在使用本地种子数据库,所以我最终删除、创建和迁移它。我不确定是不是这样,但如果你负担得起的话,值得一试。
      【解决方案4】:

      你有那个名为 time_zone 的模型的数据库字段吗?是否改为时区?

      你需要一个类似的迁移:

      add_column :users, :time_zone, :string
      

      然后

      rake db:migrate
      

      【讨论】:

      • 我在这里遇到了一个问题,因为数据库/迁移和视图之间的拼写错误,所以检查拼写错误,如果不是很明显。可以包含堆栈跟踪吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-01
      • 2011-12-24
      • 2013-03-13
      • 1970-01-01
      相关资源
      最近更新 更多