Ruby on Railsでエラーメッセージを表示する方法【初心者向け】

初心者向けにRuby on Railsでエラーメッセージを表示させる方法について解説しています。バリデーションの定義やエラーメッセージの日本語化など実際に業務でも使える知識を身につけることができるので、ぜひご覧ください。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

RubyのフレームワークのRuby on Railsでモデルを作成していると、空白のユーザーは登録できないようにしたり、パスワードの長さを制限したりといったロジックが必要になってきます。

そのロジックを簡単に実装することができる機能がバリデーションです。

今回はそんなバリデーションについてと、そのバリデーションに違反した時に表示されるエラーメッセージについて解説していきたいと思います。

 

なお本記事は、TechAcademyのWebアプリケーションオンラインブートキャンプの内容をもとに紹介しています。

 

大石ゆかり

田島メンター!!例えばユーザーが必要な項目の部分を空白の状態で送信した場合、それに対してエラーメッセージを表示させるということは可能なんでしょうか?

田島悠介

そういうときはバリデーションを使って、結果によってメッセージを表示させるようにするといいよ。

大石ゆかり

バリデーションというのは何ですか〜?

田島悠介

ある値が特定の条件を満たしているかというのをチェックすることだよ。例えばこういう書き方をしてみよう。

 

バリデーションの定義

バリデーションはモデル内で定義します。

以下のように書くと、nameかemailを空白で登録した際は登録できないようにするバリデーションを追加することができます。

class User < ApplicationRecord
  validates :name, presence: true
  validates :email, presence: true
end

バリデーションはこの他にも、最大文字、最小文字、正規表現などで作成することができます。

 

大石ゆかり

このpresenceというのは何ですか?

田島悠介

presenceは英語で存在という意味で、その名の通り空でない状態だとtrueとなるよ。

大石ゆかり

なるほど、だから”name”や”email”が空白であるかどうかということを検証することになるんですね。

田島悠介

では次に、エラーメッセージの設定をしていこう。

 

エラーメッセージの表示

エラーメッセージはエラーが発生すると、error.full_message内に格納されます。

Userモデルの場合以下のように書くとエラーメッセージを表示することができます。
 
<% if @user.errors.any? %>
  <div id="error_explanation" class="alert alert-danger">
    <ul>
      <% @user.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
    </ul>
  </div>
<% end %>

まず@userのエラーがあるか確認します。あった場合、@user.errors.full_messagesをすべて出力します。

 

[PR] Rubyのプログラミングで挫折しない学習方法を動画で公開中

エラーメッセージの日本語化

Ruby on Railsで出力されるエラーメッセージはデフォルトでは英語になっています。そのためそのままだと、ユーザーにとってとても不親切な文章になってしまいます。

そこでエラーメッセージを日本語化する方法について解説していきたいと思います。

日本語化するにはrails-i18nというgemを使用します。Gem fileに以下を追加しbundle installしてください。

gem 'rails-i18n'

次にconfig/application.rb内に以下を追記してください。

config.i18n.default_locale = :ja

そのあとサーバーを再起動するとエラーメッセージの一部が日本語化されていると思います。しかし今のままだとemailやnameは日本語化されていません。

そこでカラム名を日本語化していきましょう。config/localesないにja.ymlを追加し以下を入力してください。

ja:
 activerecord:
 models:
 attributes:
 user:
 name: 名前
 email: メールアドレス

サーバーを再起動するとエラーメッセージが完全に日本語化されていることがわかります。

 

以上、Railsでエラーメッセージを表示する方法について解説しました。

 

田島悠介

今回の場合だとapp/models内の「application_record.rb」ファイルでバリデーションを設定、app/views/user/内の「edit.html.erb」にエラーメッセージへの処理を追加という形になるね。

大石ゆかり

試しに名前を空白で入力してみたら、エラーのページに移動しました!

田島悠介

エラー画面に改めて項目を入力する欄が表示されるので、該当のデータを入力すればそこから登録もできるよ。実際にやってみよう。

大石ゆかり

分かりました、ありがとうございます!

 

[お知らせ]TechAcademyでは初心者でも最短4週間でオリジナルサービスが作れるRuby on Railsオンラインブートキャンプを開催しています。