【Rails】NameError: uninitialized constantの解決方法
Railsでアプリを作成している際に遭遇したエラー。NameError: uninitialized constantの解決方法についてメモします。
起きた事
Railsでアプリを作ってみようと思い、いつものようにRails newコマンドを叩き、Rails g modelで各種ファイルを作成し、その後rails db:migrateでdbに反映。作成したcontrollerにupdate,destroyなどの投稿、編集機能を書いていきrails sを起動し、ビューを確認しようとするとこのエラーが発生しました。
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
まとめ
簡単な打ち間違いによって発生するエラーですが、どこが悪さをしているのかすぐに特定できずに個人的に詰まったエラーです。仕組みさえ分かればすぐに解決できるエラーだと思います。