Missing template XXX/YYY の原因と対処法【Ruby on Rails 初心者向け】

Ruby on Rails

Missing Template というエラーがでて修正できません。

どんなふうに解決していけばいいでしょうか・・・

そんな疑問にお答えします。

このエラーは Ruby on Rails のコントローラがビューを呼び出すときに発生するエラーです。
特に render メソッドの使い方によるものです。

エラーメッセージを見て解決できていない場合、render メソッドの使い方に不明点があるのではないでしょうか。

この記事を読んで実際のエラーに対処できるようになればRailsのコーディング力が一段と向上しますよ!

原因: テンプレートファイルが存在しない

Missing Template エラーはそのまま「テンプレートが見つからない」というエラーです。

テンプレートとは、(デフォルト設定の場合は) .erb ファイルのことです。

つまり、Rails は erb ファイルが見つけられなかったということを主張しています。

erb ファイルの場所は render メソッドで指定します。
そのため結局のところ、「render メソッドで指定した場所に erb ファイルが無かった」、ということがエラーの直接原因です。

修正方法は、render メソッドで指定した場所に erb ファイルを置くことです。

それだけでこのエラーは修正できます。

考えられる原因と対処法

render メソッドで指定した場所に erb ファイルが無い、だからその場所に erb ファイルを置く。ということが全体的な方針となります。
しかし、初心者が起こしがちなパターンはある程度決まっています。

ここではよく発生する間違いのパターンと、それぞれの対処法について解説します。

あてはまるパターンを確認してみてください!

該当テンプレートファイルを作っていない

まずそもそも作っていない、ということが考えられます。

作っていなければ作ってあげれば解決します。

たとえば、

Missing template books/new

であれば、見つからないと言っているテンプレートは app/views/books/new.html.erb です。

このファイルを作成すればエラーはなくなります。

テンプレートの保存フォルダを間違えている

初心者がよくやりがちな間違いはテンプレートファイルの保存場所を間違えていることです。

保存場所を間違えている場合は正しい場所に移動してあげれば修正できます。

たとえば、

Missing template books/new

の場合、app/views/books/new.html.erb にテンプレートがあればいいのですが、実際のフォルダ構造を確認してみると・・・

上記の様にapp/views/new.html.erb にある場合、パスがまちがえているのでエラーとなります。

この場合は保存場所を間違えているファイルをただしフォルダ(今回の場合は app/views/books) に移動することで修正できます。

移動すれば、app/views/books/new.html.erb になりエラーがなおります。

テンプレートファイル名が間違えている

単にファイル名を間違えているというのも初心者にありがちです。

その場合はファイル名を正しくしましょう。

例えば、

Missing template books/new

というエラーが出ている場合は app/views/books/new.html.erb にファイルがあればいいわけですが、実際のフォルダ構造を確認すると

上記のように打ち間違いで neu.html.erb になっていました。

このファイル名を修正して new.html.erb にすればエラーがなおります。

こうした誤字の他に

  • 大文字・小文字の間違い
  • 全角・半角の間違い
  • スペースが入っている
  • .(ドット)と,(カンマ)の間違い

などパット見では分かりづらい場合もあるので一文字ずつ確認しましょう。

render で間違ったパスを指定している

render の使い方を間違えているのも初心者にありがちなミスです。

render メソッドの引数はテンプレートファイルのパスを指定するのですが、その書き方にはルールがあります。

例えば、

render 'books/new'

であれば、app/views/books/new.html.erb となります。

指定した文字列(books/new)の前後に app/views/と.html.erbがつくのがポイントです。

その他さらに省略するルールがあるので、そういったルールを確認したい場合は以下の記事も参照してください。

render メソッドの引数のルール【Ruby on Rails 初心者向け】

デフォルトパス(コントローラ名/アクション名)を理解していない

初心者が見落としがちなのが

アクションで render も redirect_to も実行していないときはデフォルトで
render “コントローラ名/アクション名”
を呼び出したのと同じになる。

というルールです。

例えば、

class BooksController < ApplicationController
  def show
  end
end

の場合、show メソッドは render も redirect_to も呼び出していません。

コントローラ名: books
アクション名: show

なので、この場合は、

class BooksController < ApplicationController
  def show
    render 'books/show'
  end
end

のように render ‘books/show’ を呼び出したのと同じとなります。

そのため、app/views/books/show.html.erb を作成すればエラーがなおります。

このルールについても以下で解説しているのでぜひ参考にしてください。

render メソッドの引数のルール【Ruby on Rails 初心者向け】

まとめ

Missing template XXX/YYY の原因と対処法について解説しました。

このエラーは render メソッドがうまく使えないために発生するエラーです。

本記事で解説したパターンに当てはめて解決すれば render メソッドがうまくつかえるようになります。

ぜひがんばってみてください!

その他の Rails エラー関連記事はこちら

タイトルとURLをコピーしました