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 に答える