1

このRubyRailcastsのエピソードに従って、簡単な認証を実行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

ルート.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 %>
4

1 に答える 1

5

ルートにタイプミスがあります。 コントローラとアクションを指定する場合に/必要です。#ルートは次のようになります。

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

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

ルートで使用する場合/、前の部分は名前空間に一致します。そのため、ルーターから。"sessions/new"という名前のコントローラーを見つけようとしていましたSessions::NewController。名前空間Sessionsがアプリに存在しないため、初期化されていない定数エラーが発生しました。

于 2012-07-27T13:35:42.793 に答える