2012-09-07 4 views
1

Je suis en train de montrer une barre de navigation si l'utilisateur est connectéRailsTutorial.org - Chapitre 8 - signed_in? . Lancer erreur

Dans mon application.html.erb J'ai la ligne <% if signed_in? %> - qui est à l'origine de l'erreur:

NoMethodError in Static_pages#home

undefined method '[]' for nil:NilClass

Extracted source (around line #16): 

13: </head> 
14: <body> 
15: 
16:  <% if signed_in? %> 
17:  <div class="navbar navbar-fixed-top"> 
18:  <div class="navbar-inner"> 
19:   <div class="container">` 

Voici mon SessionsHelper:

def sign_in(user) 
    cookies.permanent[:remember_token] = user.remember_token 
    self.current_user = user 
end 

def signed_in? 
    !current_user.nil? 
end 

def current_user=(user) 
    @current_user = user 
end 

def current_user 
    puts 'current_user called' 
    @current_user ||= User.find_by_remember_token(cookies.permanent[:remember_token]) 
end 

def sign_out 
    self.current_user = nil 
    cookies.delete(:remember_token) 
end 

Mon ApplicationController:

class ApplicationController < ActionController::Base 
    protect_from_forgery 
    include SessionsHelper 
end 

Je ne peux pas sembler comprendre pourquoi !current_user.nil? fracassera la page. Quand je commente !current_user.nil? dans la méthode signed_in? peut être appelée sans casser la page. Mais je n'obtiens évidemment pas la valeur signed_in que j'espérais.

Répondre

3

exception a été soulevée ici: cookies.permanent[:remember_token]

donc, cookies.permanent est nul

---- ÉDITÉE

a obtenu,

utilisation cookies.permanent[:remember_token] = seulement pour l'écriture, mais lu comme cookies[:remember_token]

+0

Excellent. Je vous remercie! Comment saviez-vous que c'est là que l'exception a été soulevée? –

+1

il n'y a que 2 appels à: [] dans le code ci-dessus) – sumskyi

Questions connexes