LoginSignup
2

More than 1 year has passed since last update.

posted at

Railsでエラーメッセージを表示させる方法

手順

①バリデーションの定義
②エラーメッセージの記入
③エラーメッセージを日本語化

①バリデーションの定義

エラーメッセージはエラーが発生すると、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 エラーメッセージの日本語化

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
What you can do with signing up
2