🤚

[Rails]deviseエラーメッセージの表示と編集

2023/10/11に公開

やること

deviseを使ったユーザーの新規登録画面で、バリデーションに対応したエラーメッセージを表示させます。
現在のビューはこんな感じ(スタイルは未作成🙇‍♂️)

各入力項目ごとのバリデーションとエラーメッセージの指定

いつも「あれ、バリデーションってどこに記述するんだっけ…」と忘れがちなのですが、バリデーションは「モデル」に記述します💻

今回はユーザー登録画面のバリデーションなので、記述するのは「user.rb」。

user.rb
validates :last_name, :first_name, :last_name_kana, :first_name_kana, presence: { message: 'は必須項目です。' }
validates :last_name, :first_name, format: { with: /\A[---々ー]+\z/, message: 'は全角で入力して下さい。' }
validates :last_name_kana, :first_name_kana, format: { with: /\A[\p{katakana}\p{blank}ー-]+\z/, message: 'はカタカナで入力して下さい。' }

これで、各項目のバリデーションとエラーメッセージが指定できました。

見出しメッセージの削除

deviseに元々準備されているエラーメッセージのビューファイルを使用すると、各エラーメッセージのほか「4 errors prohibited this user from being saved」という見出しが表示されます。
今回このメッセージは不要なので、表示されないようにします。

今回は、別のエラーメッセージ用ファイルを作成する方法で対応します。

  1. app > views > shared 内に「_error_messages.html.erb」を作成する
  2. ビューフォルダ内に、各エラーメッセージのみ表示するような記述をする
_error_messages.html.erb
<% if model.errors.any? %>
<div class="error-alert">
  <ul>
    <% model.errors.full_messages.each do |message| %>
    <li class='error-message'><%= message %></li>
    <% end %>
  </ul>
</div>
<% end %>
  1. 新規登録のビューファイルで、「_error_messages.html.erb」を読み込みます
<%= render 'shared/error_messages', model: f.object %>

以上で、エラーメッセージの表示が完了です!

参考記事

https://gaku3601.hatenablog.com/entry/2014/10/04/185947

Discussion