Создание сеанса в Rails Helper

У меня есть следующий код в моем помощнике приложения.

  route = ActionController::Routing::Routes.recognize_path(current_uri)
  controller = route[:controller]
  action = route[:action]
  session['route']<< [controller.to_s,action.to_s]

Я получаю следующую ошибку У вас есть нулевой объект, когда вы этого не ожидали! Вы могли ожидать экземпляр Array. Произошла ошибка при оценке nil.‹‹

Небольшое ведение журнала, и я вижу, что контроллер и действие работают просто отлично. Нельзя ли создавать сессии в хелперах?


person Splashlin    schedule 08.12.2010    source источник


Ответы (2)


Если вы хотите, чтобы сеанс содержал массив этих массивов («стек маршрутов», если хотите), вам сначала нужно убедиться, что session[:route] не равен нулю:

session[:route] ||= []
session[:route] << [controller.to_s, action.to_s]

В противном случае просто назначьте его:

session[:route] = [controller.to_s, action.to_s]

Кроме того, вы должны использовать символы в качестве хэш-ключей, а не строк.

person Jacob Relkin    schedule 08.12.2010
comment
Вы можете сократить первый оператор if до session[:route] ||= [] - person edgerunner; 08.12.2010

Вы можете, но то, как вы это делаете, неправильно. Когда этот код выполняется в первый раз, он получает session['route'] как nil. Ты можешь сделать

session['route'] = [controller.to_s, action.to_s]

Хотя, что вы пытаетесь сделать здесь? Я полагаю, что есть лучший способ достичь того, что вы намереваетесь сделать здесь.

person Chirantan    schedule 08.12.2010