ログイン機能のつけている最中に。
今回は、ログイン機能を実装しようとしたところ、ログインボタンを押しても、画面も動かず、ターミナルにしれっとエラーが出てくるだけで、意外と時間を食ってしまいました。
読まずに進めるのは危険
エラーが出てしまうと、どうしても拒否反応が出てしまって、読む気にならない時ありますよね。私もそうでしたし、たまにそうです。
しかしながら、エラーが出るということは、後で大きなエラーになる前に気づけたということなので、ポジティブに行きましょう!笑
ソースコード
Rails.application.routes.draw do
get '/login', to: "sessions#new"
post "/login", to: "session#create"
namespace :admin do
resources :masters
end
get 'master/index'
root to: 'top#index'
resources :users
end
class Admin::MastersController < ApplicationController
before_action :login_required
before_action :authenticate_user
def new
@master = Master.new
end
def create
@master = Master.new(master_params)
end
def show
end
def index
@users = User.all
end
def master_params
params.require(:master).permit(:name, :email, :admin, :password, :password_confirmation)
end
def login_required
redirect_to login_path unless current_user
end
def authenticate_user
if @current_user == nil
redirect_to login_path, notice: "権限がありません。"
end
end
end
h1.fw-bolder.border-bottom.border-dark.border-3.title_border_mr_7 ログイン
= form_with scope: :session, local: true do |f|
.form-group
= f.label :name, "名前"
= f.text_field :name, class: "form-control", id: "session_name"
.form-group
= f.label :password, "パスワード"
= f.text_field :password, class: "form-control", id: "session_password"
= f.submit "ログインする", class: "btn btn-primary my-5 mx-auto d-flex"
主に現場Rails5を参考にして進めていました。
出てきたエラー
Started POST "/login" for ::1 at 2022-09-13 18:32:51 +0900
ActionController::RoutingError (uninitialized constant SessionController
Object.const_get(camel_cased_word)
^^^^^^^^^^
Did you mean? SessionsController
raise MissingController.new(error.message, error.name)
^^^^^):
Started GET "/login" for ::1 at 2022-09-13 18:32:51 +0900
Processing by SessionsController#new as HTML
Rendering layout layouts/application.html.slim
Rendering sessions/new.html.slim within layouts/application
Rendered sessions/new.html.slim within layouts/application (Duration: 1.2ms | Allocations: 705)
Rendered layout layouts/application.html.slim (Duration: 6.5ms | Allocations: 2487)
Completed 200 OK in 34ms (Views: 9.1ms | Allocations: 2753)
入力された値をpostで"/login"に投げれてはいるが、何やら、ルーティングが間違っているよう。
解決策
とにかく、どこの何がエラーになっているのかを特定するべし。
uninitialized constant SessionController
こちらを直訳すると、「定義されたクラスを読み込むことができない。」
sessioncontrollerが読み込まれていないよう...
??
session「s」controllerだよな?
ルーティングを見返してみると、createアクションのコントローラーが単数形に...
複数形であるコントローラーを単数形でかいてしまったがための、エラーだったのですね...
単なる凡ミスですが、エラーを正しく読むことができればエラーは意外と簡単に見つけることができます。
私自身まだまだですが、みなさんエラーと仲良くなっていきましょう!