本日もオリジナルアプリを作成中にエラーが発生しました。
ActionView::MissingTemplate in Devise::Registrations#new
現状説明:
エラーハンドリングするために、viewに render を記述、
挙動確認のため新規登録をクリックしてエラー発生
①何が問題でどうしたい
エラーを解決して、新規登録画面にエラーが表示されるようにしたい
②現在(位置)
部分テンプレートを作成し、部分テンプレートを表示させたい場所に、
部分テンプレートを呼び出す記述をし、
新規投稿ページにて何も情報を入力せずに、 登録ボタンを押した。
③問題点
ActionView::MissingTemplate in Devise::Registrations#new
意味は、shared/_error_messages
が見つからないというエラー
④仮説
エラーの意味を調べ、見つからないと言われているものから調べる
正しいか確認する → そのために、正しいかどうかを調べる
1️⃣場所(存在するのか)
場所の確認(そもそも見つからないと言われているものは存在するのか)app/views/shared/_error_messages.html.erb → 存在する
2️⃣前提&置換((構文的に)正しく設定されているか)
前提の確認(記述の仕方は(構文的に)正しいか))
正しい構文で、値は正しく置き換わっているか
そのファイル名が適切に_
で始まっているか、
そして拡張子が.html.erb
になっているか → なっている
3️⃣内容((構文的に)正しく情報を受け取っているか)
内容の確認(構文的に)そこに記述されている内容は正しいか)
(構文的に)正しい設定・値に置き換えられているなら、
正しい情報を受け取っているのか
app/views/shared/_error_messages.html.erbファイル内に
書かれている内容は正しいか → 内容は正しい
4️⃣場所(存在するのか)
場所の確認(shared/_error_messages
が使われる場所は存在するのか)
app/views/devise/registrations/new.html.erb → 使われる場所は存在する
5️⃣前提&置換((構文的に)正しく設定されているか)
前提の確認(記述の仕方は(構文的に)正しいか))
正しい構文で、値は正しく置き換わっているか
<%= render 'shared/error_messages', model: @user %>
→ なっている
6️⃣内容((構文的に)正しく情報を受け取っているか)
内容の確認(構文的に)そこに記述されている内容は正しいか)
(構文的に)正しい設定・値に置き換えられているなら、
正しい情報を受け取っているのか → @user に関することをまだ調べていない
7️⃣場所(存在するのか)
場所の確認( @user
が定義されている場所は存在するのか)
app/controllers/users_controller.rb → 存在する
8️⃣前提&置換((構文的に)正しく設定されているか)
前提の確認(記述の仕方は(構文的に)正しいか))
正しい構文で、値は正しく置き換わっているか
app/controllers/users_controller.rb に 以下の記述がないことがわかった
(構文的に)正しく設定されていないことがわかった
すなわち、@user インスタンス化されていなかった
def new
@user = User.new
end
⑤試したこと
app/controllers/users_controller.rb に
@user が正しくインスタンス化されるように記述を追加した
def new
@user = User.new
end
⑥結果
エラーは解決し、エラー画面が表示されるようになった
原因:
usersコントローラーに newアクションを定義せず、
インスタンス化もしていなかった
解決方法:
app/controllers/users_controller.rb に 新規登録時、
インスタンス変数を生成し、view に渡せるようにした
def new
@user = User.new
end
気付き:
エラー発生した場合
以下の手順でエラーの原因を探していく
1️⃣場所 ここどこ?
現在位置を把握する
エラーを調べ根幹を見つける
2️⃣前提 これで合ってる?
交通手段は正しいか
エラーの根幹は(構文的に)正しく設定されているか調べる
3️⃣置換
乗車できたか
(構文的に)正しく設定されているなら、 正しく置き換えができているか調べる
2️⃣3️⃣はセットのイメージ
4️⃣内容 この方角で合ってる?
移動できているか
場所が正しく存在し、
正しく設定され、正しく置き換えられているなら、
正しく情報を受け取っているか調べる
解決しなければ
1️⃣から始める