🤚
[Rails]deviseエラーメッセージの表示と編集
やること
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」という見出しが表示されます。
今回このメッセージは不要なので、表示されないようにします。
今回は、別のエラーメッセージ用ファイルを作成する方法で対応します。
- app > views > shared 内に「_error_messages.html.erb」を作成する
- ビューフォルダ内に、各エラーメッセージのみ表示するような記述をする
_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 %>
- 新規登録のビューファイルで、「_error_messages.html.erb」を読み込みます
<%= render 'shared/error_messages', model: f.object %>
以上で、エラーメッセージの表示が完了です!
参考記事
Discussion