2012-09-07 55 views
1

我試圖展現一個導航欄,如果用戶在簽署RailsTutorial.org - 第8章 - signed_in? 。拋出錯誤

在我application.html.erb我也行 <% if signed_in? %> - 這是造成錯誤:

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

這裏是我的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 

的ApplicationController:

class ApplicationController < ActionController::Base 
    protect_from_forgery 
    include SessionsHelper 
end 

我似乎無法找出爲什麼!current_user.nil?更是打破了網頁。當我註釋掉!current_user.nil?中的signed_in?方法可以在不中斷頁面的情況下調用。但我顯然沒有得到我期待的價值。

回答

3

異常被這裏提出:cookies.permanent[:remember_token]

所以,cookies.permanent是零

---- EDITED

得到它,

使用cookies.permanent[:remember_token] =只寫,但它讀成cookies[:remember_token]

+0

非常好。謝謝!你怎麼知道這是異常提出的地方? –

+1

在上面的代碼中只有2個調用:[]) – sumskyi