ino-akiのブログ

ITエンジニアを目指して学習したことをアウトプットするブログ

deviceのログインページ エラーハンドリング

新規登録ページだと<%= render 'shared/error_messages', object: @user %>でエラー表示されたがログインページだと<%= render 'shared/error_messages', object: @user %>でエラー表示されなかったのでAIに聞いてみた

AI解答

Deviseを使用した場合、新規登録ページ(registration)やパスワードリセットページ(password reset)など、一部のページではデフォルトでエラーメッセージが自動的に表示される仕組みがありますが、ログインページ(session)に関しては、エラーメッセージの表示はデフォルトではサポートされていないことがあります。

これは、Deviseがログインフォームに対してエラーメッセージを自動で表示する仕組みを提供していないためです。通常、ログインが失敗した場合、Deviseはフラッシュメッセージを生成しますが、これを適切なフォームの位置に表示するためには、アプリケーションのビューで明示的に設定する必要があります。

例えば、ログインページのビュー(`sessions/new.html.erb`)にて、適切な箇所に以下のようにフラッシュメッセージを表示するコードを追加することができます:

```erb
<% if flash[:alert].present? %>
  <div class="alert alert-danger">
    <%= flash[:alert] %>
  </div>
<% end %>
```

このようにすることで、Deviseが生成するログインエラーメッセージ(`flash[:alert]`)を適切に表示することができます。

 

まとめ
ログインページは新規登録ページと違いエラーメッセージを自動で表示する仕組みを提供していないので<%= flash[:alert] %>というコードを追加する必要がある。

app\views\devise\sessions\new.html.erb

<div class="main">
  <div class="inner">
    <div class="form__wrapper">
      <h2 class="page-heading">ユーザーログイン</h2>

      <div class='login-flash-message <%= 'show' if flash[:alert] %>'>
        <%= flash[:alert] %>
      </div>
#以下略

無事エラー表示できました。