1
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?

【豆知識+Error】コードがあっていても少し位置が違うだけでエラーになってしまうrenderのお話

Last updated at Posted at 2024-08-25

はじめに

今日は短めですが、自分でコードを入力していく中で位置が違っただけでうまく表示されない、ローカルにアクセスしたときエラーの画面になってしまったので、同じようなミスをしない為にも記事にすることでアウトプット&記憶にとどめやすいようにしたいと思います。

環境

  • Windows, WSL
  • Docker
  • Ruby 3.2.3
  • Rails 7.1.3

どんな状況だったのか

<div class="w-5/6 mx-auto max-w-screen-xl">
  <div class="my-10">
    <h1 class="text-4xl md:text-5xl font-bold mb-10 pb-4 border-b-4 border-dashed border-stone-400 text-center">
      パスワード再設定
    </h1>

    <div class="w-full md:w-2/3 lg:w-1/2 mx-auto">
      <%# バリデーションエラーメッセージ表示 %>
      <%= render 'shared/error_messages', object: f.object %>
    </div>

    <%= form_with model: @user, url: password_reset_path(@token) do |f| %>

さぁ、皆さんはこんなコードを書いたときどんなエラーが起こると思いますか?

シンキングタイム

と書きつつ答えはすぐ出す

Error内容はこんなでした

NameError in PasswordResets#edit Showing /myapp/app/views/password_resets/edit.html.erb where line #9 raised:

undefined local variable or method `f' for #ActionView::Base:0x000000000237d0

<%= render 'shared/error_messages', object: f.object %>

エラー内容の意味と原因

  • fが定義されていないためにエラーが発生している
  • fはform_withブロック内で定義されるローカル変数だから、form_withのブロックの中で使わないといけない

修正

<div class="w-5/6 mx-auto max-w-screen-xl">
  <div class="my-10">
    <h1 class="text-4xl md:text-5xl font-bold mb-10 pb-4 border-b-4 border-dashed border-stone-400 text-center">
      パスワード再設定
    </h1>

    <div class="w-full md:w-2/3 lg:w-1/2 mx-auto">
      <%= form_with model: @user, url: password_reset_path(@token) do |f| %>
        <%# バリデーションエラーメッセージ表示 %>
        <%= render 'shared/error_messages', object: f.object %>

このようにちょっと位置を変えただけ、ちゃんとform_withのブロックの中で使ってあげることでエラーが消えました!!

さいごに

通常のフラッシュmessageはコントローラーの中で定義することで、ファイルを見た時にすぐに「このエラーはこういうアクションをとった時にこんな内容でフラッシュmessageを表示することができるのか」とわかりやすいのですが、バリデーションmessageはちゃんとした場所に置かないと表示するされない以前にエラーでサイト自体表示されない!!という事がよくわかりました。GPTへの質問の仕方も考えさせられました💦
今回の記事が何か参考になれば幸いです

1
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
1
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?