【问题标题】:Ruby on Rails: invalid argument to TimeZone[]: nilRuby on Rails:TimeZone[] 的无效参数:nil
【发布时间】:2013-10-14 19:56:24
【问题描述】:

注意:这是我的第一篇文章,请多多关照。我是 Rails 新手,所以很可能我错过了一些简单的东西。

我在本地使用 Ruby on Rails 应用程序,在尝试填写测试表单时收到此 ArgumentError:

invalid argument to TimeZone[]: nil

Application Trace 显示如下:

app/models/venue.rb:117:in `timezone'
app/controllers/events_controller.rb:80:in `block in create'

venue.rb 中的第 116-118 行:

def timezone
 ActiveSupport::TimeZone.new(timezone_name)
end

events_controller.rb 中的第 78-87 行:

["start", "end"].each do |t|
     month, day, year = params["event"]["#{ t }_date"].split("/")
     @event.send("#{ t }s_at=", @event.venue.timezone.local_to_utc(Time.utc(
        ("20" + year).to_i, 
        month.to_i, 
        day.to_i,
        military_hours(t),
        params["#{ t }_minute"].to_i,
        0
     )))

该表单在实时站点上正常工作,因此我可能不正确地设置了我的开发环境。谁能指出我正确的方向?

更新

  class Venue
      key :timezone_name, String

  def set_timezone_name
     tz = Timezone.contains(self)
     self.timezone_name = tz.name if tz
  end

【问题讨论】:

  • timezone_name is null 是venue 对象之一。 timezone_name 的代码是什么?是变量的方法吗?
  • 您好 Rajesh,感谢您的回复。编辑我的原始帖子以解决您的问题
  • 哪个代码负责设置timezone_name的值?
  • 再次更新,谢谢!

标签: ruby-on-rails ruby ruby-on-rails-3 timezone activesupport


【解决方案1】:

如果您为这个问题提供更多背景信息,将会有所帮助。我假设在没有设置时调用set_timezone_name 来初始化timezone_name 值。在这种情况下,set_timezone_name 可能无法设置值。您可以尝试提供后备以保证设置了值。示例:

def set_timezone_name
  tz = Timezone.contains(self)
  self.timezone_name = tz.try(:name) || “Eastern Time (US & Canada)”
end

【讨论】:

  • 我很抱歉缺少上下文。这对我来说是全新的体验!您的假设是正确的,但是您提供的解决方案并没有解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
相关资源
最近更新 更多