##手順
①バリデーションの定義
②エラーメッセージの記入
③エラーメッセージを日本語化
##①バリデーションの定義
エラーメッセージはエラーが発生すると、error.full_message内に格納される。
バリデーションはモデル内で定義。
以下のように書くと、nameかemailを空白で登録した際は登録できないようにするバリデーションを追加することができる。
class User < ApplicationRecord
validates :name, presence: true
validates :email, presence: true
end
##②エラーメッセージの記入
エラーメッセージを記入する前に、前提として以下の3つを注意する。
・エラーメッセージ表示部分をformのテンプレートに記載せず、専用のパーシャルが作られていること。
・特定のモデルに依存せず汎用的なつくりにする必要がある。格納場所はshared配下にすること。
・エラーメッセージの表示方法はアプリケーションごとに異なるため、エラーメッセージを直接生成するようなビューヘルパーはRailsに含まれてない。 表示が必要な場合はパーシャル化して、汎用的に使えるようにする。
記入例
#shared/_error_messages.html.erb
<% if object.errors.any? %>
<div class="alert alert-danger">
<ul class="mb-0">
<% object.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
#app/views/boards/_form.html.erb(パーシャルを呼び出し)
<%= form_with model: board, local: true do |f| %>
<%= render 'shared/error_messages', object: f.object %>※
<div class="form-group">
<%= f.label :title %>
f.objectとは
f.objectのobjectは、form_withやform_forなどのオプションであり、formのブロック変数に対して使用する事でブロック内でモデルオブジェクトを呼び出す事が出来る。
同じコードを流用する際に、変数を変える必要が無くなる。
##③エラーメッセージを日本語化
エラーメッセージを入れる前に、railsアプリを既に日本語化していた場合は特に必要なし。
・config/application.rbにconfig.i18n.default_locale = :ja
を追加。
・gem 'rails-i18n'
をインストール。
・activerecord/ja.yml
にモデルの日本語化を記入。
例:
ja:
activerecord:
models:
user: ユーザー
attributes:
user:
first_name: 名
last_name: 姓
email: メールアドレス
password: パスワード
password_confirmation: パスワード確認
これらを設定すると、「タイトルを入力してください」「本文を入力してください」のようなエラーメッセージが表示される。
##参考記事
Ruby on Railsでエラーメッセージを表示する方法【初心者向け】
Rails フォーム入力時エラー情報を個別表示(f. objectについて)
Rails6 エラーメッセージの日本語化