概要
- RailsのFormオブジェクトパターン使用時の入力フォームについてのバリデーションで弾かれたエラー内容を日本語として表示させる事を行ったので備忘録としてまとめておきます。
前提
- RailsのアプリケーションにてFormオブジェクトパターンを用いている。
Formオブジェクトパターンについて簡単に
- Railsを利用する開発における実装パターンのひとつ。
- 主に1つのフォーム送信時に複数のモデルを操作したい場合やテーブルに情報を保存しない情報に対するバリデーションを行いたい場合に使用します。
Formオブジェクト使用時のバリデーションについて
- まず、1つのフォームから複数のテーブルにデータを保存する場合、Formオブジェクトを使用していないと、フォームから送られてきた値を処理(createやupdate)する際に複数テーブルに関連したモデル内記述のバリデーションで入力値が弾かれてしまうと処理を継続できなくなります。
- その点を補う為にFormオブジェクトパターンを用います。
- Formオブジェクトのインスタンス内にバリデーションの記述を行う事で、フォームからの入力値がバリデーションに引っかかった場合は、入力情報と共にエラーメッセージをフォームに返す事が出来ます。
エラーメッセージの日本語化について
1.作成中アプリケーションのconfigフォルダ内のapplication.rbに
module (作成アプリケーション名)
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 6.0
# 日本語の言語設定
config.i18n.default_locale = :ja #←この一文をconfig内のapplication.rbに追加。
# Settings in config/environments/* take precedence over those specified here.
# Application configuration can go into files in config/initializers
# -- all .rb files in that directory are automatically loaded after loading
# the framework and any gems in your application.
end
end
2.日本語に対応する"rails-i18n"というGemを導入します。
・このGemの導入によりrails-i18nで翻訳されている英文が日本語として使用出来るようになります。
※Gemについての詳細は下記のサイトで確認して下さい。
https://github.com/svenfuchs/rails-i18n
Gemfileにrails-i18nを記述しターミナルにて「bundle install」を行います。
~ 中略 ~
gem 'rails-i18n'
bundle install
3.rails-i18nのGemで対応出来なかった単語に関して日本語翻訳する為のlocaleファイルを作成します。
・localeファイル・・・様々な言語に対応できる言語ファイルの事です。
・まずlocalesフォルダはをconfigフォルダ内に作成します。
・そしてconfig/localesディレクトリに「ja.yml」というファイルを作成します。
4.ja.ymlのファイルを作成したら、ファイル内に日本語化したい英文・英単語と日本語訳を記述していきます。
・ja.ymlファイル内の記述に関しては下記のコードを参照して頂ければと思います。
※この時に注意点です!
・Formオブジェクトパターンを使用していないモデルに関しては、ActiveRecordを継承していますが、Formオブジェクトパターンを用いて作成したモデルは、ActiveModelを継承して作成しています。
ですので、Formオブジェクトパターンを用いたモデルに対しての翻訳の部分の記述の際は気をつけて下さい。
ja:
activerecord: #← ActiveRecordを継承しているモデルに対しての翻訳部分
attributes:
user: #←モデルファイル名
nickname: ニックネーム #←rails-i18nにて翻訳されなかった単語名
gender: 性別 #←rails-i18nにて翻訳されなかった単語名
age: 年齢 #←rails-i18nにて翻訳されなかった単語名
activemodel: #← ActiveModelを継承して作成したFormオブジェクトパターンのモデルに対しての翻訳
attributes:
book_data: #←Formオブジェクトパターン使用のモデルファイル名
title: タイトル #←rails-i18nにて翻訳されなかった単語名
publisher: 出版社 #←rails-i18nにて翻訳されなかった単語名
author: 著者 #←rails-i18nにて翻訳されなかった単語名
isbn: ISBN #←rails-i18nにて翻訳されなかった単語名
5.サーバー再起動後にブラウザで確認して下さい。
・再起動後に、フォームのバリデーションのエラーメッセージが問題なく翻訳されているか確認して下さい。