2010-12-08 31 views
0

J'ai le code suivant dans mon assistant d'application.Création d'une session dans Rails Helper

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

-je obtenir l'erreur suivante Vous avez un objet nul quand on ne m'y attendais pas! Vous avez peut-être attendu une instance de Array. L'erreur s'est produite lors de l'évaluation de zéro. < <

Une connexion rapide et je vois que le contrôleur et l'action fonctionnent très bien. Ne pouvez-vous pas créer des sessions dans les assistants?

Répondre

0

Si vous voulez la session de tenir un tableau de ces tableaux (une « pile de routes » si vous voulez), vous devez d'abord vous assurer que session[:route] est non nul:

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

Dans le cas contraire , attribuez-le simplement:

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

De même, vous devez utiliser des symboles comme clés de hachage, et non comme des chaînes.

+1

Vous pouvez raccourcir la première instruction 'if' vers' session [: route] || = [] ' – edgerunner

+0

@edgerunner Ajouté. Merci! –

0

Vous pouvez mais la façon dont vous le faites est erronée. Lorsque ce code s'exécute pour la première fois, la session ['route'] est nulle. Vous pouvez le faire

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

Bien que, qu'essayez-vous de faire ici? Je suppose qu'il est préférable de réaliser ce que vous avez l'intention de faire ici.