2013-06-26 88 views
0

我正在練習邁克爾哈特爾的導軌教程第8章。Michael Hartl的Rails教程第8章。用戶會話未創建

我有以下頭部分。

<header class="navbar navbar-fixed-top navbar-inverse"> 
    <div class="navbar-inner"> 
    <div class="container"> 
     <%= link_to "sample app", root_path, id: "logo" %> 
     <nav> 
     <ul class="nav pull-right"> 
      <li><%= link_to "Home", root_path %></li> 
      <li><%= link_to "Help", help_path %></li> 
      <% if signed_in? %> 
       <li><%= link_to "Users", '#' %></li> 
       <li id="fat-menu" class="dropdown"> 
       <a href="#" class="dropdown-toggle" data-toggle="dropdown"> 
        Account <b class="caret"></b> 
       </a> 
       <ul class="dropdown-menu"> 
        <li><%= link_to "Profile", current_user %></li> 
        <li><%= link_to "Settings", '#' %></li> 
        <li class="divider"></li> 
        <li> 
        <%= link_to "Sign out", signout_path, method: "delete" %> 
        </li> 
       </ul> 
       </li> 
      <% else %> 
       <li><%= link_to "Sign in", signin_path %></li> 
      <% end %> 
     </ul> 
     </nav> 
    </div> 
    </div> 
</header> 

及以下的會話控制器

def new 
    end 

    def create 
    user = User.find_by_email(params[:session][:email].downcase) 
    if user && user.authenticate(params[:session][:password]) 
     sign_in user 
     redirect_to user 
    else 
     flash.now[:error] = 'Invalid email/password combination' 
     render 'new' 
    end 
    end 

    def destroy 
    sign_out 
    redirect_to root_url 
    end 

會議助手

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 
    @current_user ||= User.find_by_remember_token(cookies[:remember_token]) 
    end 

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

用戶模型

class User < ActiveRecord::Base 
    attr_accessible :name, :email, :password, :password_confirmation 
    has_secure_password 
    before_save :create_remember_token 
    before_save { |user| user.email = email.downcase } 

    validates :name, presence: true, length: { maximum: 50 } 
    VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 
    validates :email, presence: true, 
      format:  { with: VALID_EMAIL_REGEX }, 
      uniqueness: { case_sensitive: false } 
    validates :password, presence: true, length: { minimum: 6 } 
    validates :password_confirmation, presence: true 

    private 
    def create_remember_token 
    self.remember_token = SecureRandom.urlsafe_base64 
    end 
end 

現在,當我登錄用戶,並嘗試看看下拉我添加到的菜單標題部分。我無法看到。當我調試代碼時,我發現這是因爲用戶會話沒有創建,並且它不會從頭部分中的<% if signed_in? %>條件繼續。

+0

您是否添加了signed_in?在application_Controller中? – beck03076

+0

不能正常工作.... – Sami

回答

0

好的,我解決了這個問題。方法

def signed_in? 
    !current_user.nil? 
    end 

在session_helper中不應該包含「!」符號。

相關問題