2010-12-08 2 views
0

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

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

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

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

ответ

0

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

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

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

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

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

+1

Вы можете сократить первое выражение `if` до` session [: route] || = [] ` – edgerunner 2010-12-08 06:49:37

0

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

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

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