0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ActionController::RoutingErrorの凡ミス

Posted at

ログイン機能のつけている最中に。

今回は、ログイン機能を実装しようとしたところ、ログインボタンを押しても、画面も動かず、ターミナルにしれっとエラーが出てくるだけで、意外と時間を食ってしまいました。

読まずに進めるのは危険

エラーが出てしまうと、どうしても拒否反応が出てしまって、読む気にならない時ありますよね。私もそうでしたし、たまにそうです。
しかしながら、エラーが出るということは、後で大きなエラーになる前に気づけたということなので、ポジティブに行きましょう!笑

ソースコード

config/routes.rb
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

masters_controller
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

sessions/new.html.slim
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アクションのコントローラーが単数形に...

複数形であるコントローラーを単数形でかいてしまったがための、エラーだったのですね...

単なる凡ミスですが、エラーを正しく読むことができればエラーは意外と簡単に見つけることができます。
私自身まだまだですが、みなさんエラーと仲良くなっていきましょう!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?