2012-07-27 90 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

相关问题