Prog-Box

未経験がweb系エンジニアを目指す過程をメモします。 Rails学習中

【Rails】NameError: uninitialized constantの解決方法

Railsでアプリを作成している際に遭遇したエラー。NameError: uninitialized constantの解決方法についてメモします。

起きた事

Railsでアプリを作ってみようと思い、いつものようにRails newコマンドを叩き、Rails g modelで各種ファイルを作成し、その後rails db:migrateでdbに反映。作成したcontrollerにupdate,destroyなどの投稿、編集機能を書いていきrails sを起動し、ビューを確認しようとするとこのエラーが発生しました。

f:id:Takuyakou:20191003203255p:plain

rails new blog

rails g model ariticle title:string body:text

rails db:migrate

articles_controller.rb

class ArticlesController < ApplicationController
  before_action :find_post, only: [:show, :edit, :update, :destroy]

  def index
    @articles = Article.order(created_at: :desc)
  end

  def show
  end

  def new
    @article = Article.new
  end

  def edit
  end

  def create
    @article = Article.new(article_params)
    if @article.save
      redirect_to @article, notice: "作成に成功しました"
    else
      render :new, alert: "作成に失敗しました"
    end
  end

  def update
    if @article.update(article_params)
      redirect_to @article, notice: "更新に成功しました"
    else
      render :edit, alert: "更新に失敗しました"
    end
  end

  def destroy
    if @article.destroy
      redirect_to root_path, notice: '削除に成功しました'
    else
      redirect_to root_path, alert: '削除に失敗しました'
    end
  end

  private

  def find_Article
    @article = Article.find(params[:id])
  end

  def article_params
  end
end

やった事

記述ミスがないかどうか、まずは確認しました。何度か見直した結果、controllerファイルには間違いは見当たらず動いてくれそうに見えます(書き方は別として)エラーでは四行目がおかしいと言っていますが、index部分にも異常は見当たりません。サーバーの再起動も行いますが、もちろん解決しませんでした。

解決方法

いつものようにググってみると、このエラーはどうやらファイル名とクラス名が一致していないと起こるという事が分かります。つまり問題はコントローラーではなく、そもそものRails g modelコマンドの打ち間違いにあるのでは?という仮説を立ててファイル名を確認すると、モデル名が「article.rb」ではなく「ariticle.rb」となっていました。さらにgコマンドも複数形ではなく単数形となっていたので、rails dでファイル削除し、もう一度rails gコマンドでモデルを作成すると正常に動作しました。

rails d model ariticle title:string body:text

rails g model articles title:string body:text

まとめ

簡単な打ち間違いによって発生するエラーですが、どこが悪さをしているのかすぐに特定できずに個人的に詰まったエラーです。仕組みさえ分かればすぐに解決できるエラーだと思います。