1

如果用户登录,我正在尝试显示导航栏。

在我的 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

我的应用程序控制器:

class ApplicationController < ActionController::Base
  protect_from_forgery
  include SessionsHelper
end

我似乎无法弄清楚为什么!current_user.nil?会破坏页面。!current_user.nil?当我在方法中注释掉时,signed_in?可以在不破坏页面的情况下调用。但我显然没有得到signed_in我希望的价值。

4

1 回答 1

3

这里提出了异常:cookies.permanent[:remember_token]

所以,cookies.permanent是零

---- 已编辑

知道了,

仅用于cookies.permanent[:remember_token] =写作,但将其读作cookies[:remember_token]

于 2012-09-07T08:22:32.573 回答