Ruby on Rails: неверный аргумент для TimeZone[]: nil

ПРИМЕЧАНИЕ. Это мой первый пост, поэтому будьте добры. Я новичок в рельсах, поэтому вполне вероятно, что я упускаю что-то простое.

Я работаю с приложением Ruby on Rails локально и получаю этот ArgumentError при попытке заполнить тестовую форму:

invalid argument to TimeZone[]: nil

Трассировка приложения показывает следующее:

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

Строки 116-118 в месте проведения.рб:

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

Строки 78-87 в файле events_controller.rb:

["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

person Brendan Ronan    schedule 08.10.2013    source источник
comment
timezone_name равно null является одним из объектов venue. Какой код для timezone_name? Это метод переменной?   -  person Rajesh Kolappakam    schedule 08.10.2013
comment
Привет Раджеш, спасибо за ответ. Редактирование моего исходного сообщения, чтобы ответить на ваш вопрос   -  person Brendan Ronan    schedule 08.10.2013
comment
Какой код отвечает за установку значения timezone_name?   -  person Rajesh Kolappakam    schedule 08.10.2013
comment
Еще раз обновил, спасибо!   -  person Brendan Ronan    schedule 08.10.2013


Ответы (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
person rossta    schedule 08.10.2013
comment
Прошу прощения за отсутствие контекста. Это новый опыт для меня! Вы правы в своих предположениях, однако предложенное вами решение не решило проблему. - person Brendan Ronan; 08.10.2013