2012-07-27 95 views
0

我正在關注this Ruby Railcasts episode以獲得一些簡單的身份驗證,並且在導航到登錄頁面時出現錯誤uninitialized constant Sessions。我已經檢查過我的班級,並且名字是正確的,這似乎是大多數人報告的問題。任何想法可能發生在這裏?路由錯誤:未初始化的常量會話

我的控制文件的名稱爲sessions_controller.rb,代碼如下:

class SessionsController < ApplicationController 
    def new 
    end 

    def create 
    user = User.authenticate(params[:email], params[:password]) 
    if user 
     session[:user_id] = user.id 
     redirect_to root_url, :notice => 'Logged In!' 
    else 
     flash.now.alert = 'Invalid email or password' 
     render 'new' 
    end 
    end 

    def destroy 
    session[:user_id] = nil 
    redirect_to root_url, :notice => 'Logged Out!' 
    end 
end 

的routes.rb文件:

Albumtracker::Application.routes.draw do 
    get "login" => "sessions/new", :as => "login" 
    get "logout" => "sessions/destroy", :as => "logout" 

    get "signup" => "users/new", :as => "sign_up" 

    root :to => 'users#new' 

    resources :users 
    resources :sessions 

    get "pages/index" 
end 

節/新視圖文件:

<h1>Log in</h1> 

<%= form_tag sessions_path do %> 
    <p> 
    <%= label_tag :email %><br /> 
    <%= text_field_tag :email, params[:email] %> 
    </p> 
    <p> 
    <%= label_tag :password %><br /> 
    <%= password_field_tag :password %> 
    </p> 
    <p class="button"><%= submit_tag "Log in" %></p> 
<% end %> 
+0

檢查會話控制器中的代碼,或者更好的是在這裏發佈一些代碼,以便其他人也可以看到。 – 2012-07-27 02:03:01

+0

也是文件的名稱 – 2012-07-27 02:05:22

+0

更新了問題 – 8vius 2012-07-27 02:16:35

回答

4

您的路線中有錯別字。指定控制器和操作時,/應爲#。你的路線應該是這樣的:

get "login" => "sessions#new", :as => "login" 
get "logout" => "sessions#destroy", :as => "logout" 

get "signup" => "users#new", :as => "sign_up" 

當您在路線前面的部分匹配到一個命名空間使用/。因此,從"sessions/new"路由器試圖找到名爲Sessions::NewController的控制器。由於您的應用中不存在命名空間Sessions,因此您會收到未初始化的常量錯誤。

+0

正確。這是一個很常見的初學者錯誤。 – Romain 2012-07-27 13:38:32

+0

非常感謝 – 8vius 2012-07-27 13:58:09

相關問題