2012-03-07 57 views
0

跟隨Hartl的railtutorial。當我嘗試登錄時,它會將我帶到正確的頁面,但是「成功登錄!」不會在界面上閃爍。此外,當我嘗試退出時,出現路由錯誤:No route matches [GET] "/sessions/1"RailsTutorial Sessions:登錄不成功並註銷導致路由錯誤

任何幫助,將不勝感激!

這裏是我的sessions_controller.rb:

類SessionsController < ApplicationController的

def new 
    @title = "Log in" 
end 

def create 
    user = User.authenticate(params[:session][:email], 
          params[:session [:password])  
    if user.nil? 
    flash.now[:error] = "Invalid email/password combination." 
    @title = "Sign in" 
    render 'new' 
    else 
    flash[:success] = "Successful login!" 
    sign_in user 
    redirect_back_or user 
    end 
end 

def destroy 
    sign_out 
    redirect_to root_path 
end 

end 

這裏是我的routes.rb:

SampleApp::Application.routes.draw do 

    #resources :users this is the line I removed to get my code to work 
    resource :user #this is the lined I added to get my code to work 

    resources :sessions, :only => [:new, :create, :destroy] 


    match '/sessions', :to => 'users#show' 
    match '/signup', :to => 'users#new' 
    match '/login', :to => 'sessions#new' 
    match '/logout', :to => 'sessions#destroy' 

    root :to => 'pages#home' 

更改resources :usersresource :user似乎讓我「登錄「和」退出「,除了在用戶界面上沒有出現閃存成功。這導致我相信我的創建方法存在錯誤。

這裏是我的sessions_helper.rb:

module SessionsHelper 

def sign_in(user) 
    cookies.permanent.signed[:remember_token] = [user.id, user.salt] 
    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_from_remember_token 
end 

def current_user?(user) 
    user == current_user 
end 

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

def redirect_back_or(default) 
    redirect_to(session[:return_to] || default) 
    clear_return_to 
end 

private 

def user_from_remember_token 
    User.authenticate_with_salt(*remember_token) 
end 

def remember_token 
    cookies.signed[:remember_token] || [nil, nil] 
end 

def store_location 
    session[:return_to] = request.fullpath 
end 

def clear_return_to 
    session[:return_to] = nil 
end 
end 

編輯:解決方案張貼在代碼。

回答

3

我想你應該用戶只需flash[:success]flash[:error]而不是flash.now

和你有什麼使用鏈接登錄電子呢?

+0

我會嘗試。我正在使用銷燬方法。我現在會發佈會話幫手。閃光燈[:成功]閃光燈 – Huy 2012-03-07 19:59:56

+0

!你知道爲什麼我必須使用'resource:user'而不是'resources:users'嗎? – Huy 2012-03-07 20:03:40

+0

是不是隻爲視圖幫手?我想你應該把你的所有方法移到應用程序控制器上...... – klump 2012-03-07 20:04:03