#目次
①エラーメッセージの仕組み
②エラーメッセージのビューへの反映
③日本語の設定の方法
##①エラーメッセージの仕組み
インスタンス.errors.full_messagesとすると空の配列を返してくる。
バリデーションに引っかかった時に、エラーのメッセージが配列の中に、入る仕組みになっている。
仮にpostモデルにvalidates :trueと記述した際には、必ずpostモデルに何かしら入っていなければならない。その際に何も入力せずに保存した時の動きを確認する
①rails cと入力
②post = Post.new(content:"") 不正なデータを入力
③post.errors.full_messagesと入力すると以下の表示が返ってくる
→[]
④post.save 保存するとfalseが返ってくる
⑤この時、post.errors.full_messagesと入力すると
["Content can't be blank"]というメッセージが返ってくる
##②エラーメッセージのビューへの反映
エラーメッセージをビューに反映する際には、上記の配列から抜き出して表示をすれば良い。
<% @post.errors.full_messages.each do |message| %>
<%= message %>
<% end %>
##③日本語の設定の方法
②でエラーメッセージはビューで表示できたと思うが、表示が英語になっているはず。
英語表記から日本語に変更するには、以下の手順を踏む。
- gem 'rails-i18n'をGemfileに追加。
- bundle installしましょう。
- 一部日本語化を指定する設定用のja.ymlファイルを作成。
- configに設定を追加。
- 再起動
3について、
config/locales/models/に、ja.ymlというファイルを作成して、以下のようにカラム名と日本語の対応表を記述しなければいけない。
ja:
activerecord:
models:
post: 投稿
attributes:
post:
content: 投稿内容
モデル名:
カラム名:日本語表示
4について
config.i18n.default_locale = :ja
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.yml').to_s]
上記の2文を追加すれば良い。これは、正規表現を使い、config/locales以下のディレクトリ内にある全てのymlファイルを読み込むように指示するものとなります。
※localeとは、多言語化用の言語ファイル。多言語化以外にも、何度も使う文言を一限管理するために使われる。住所、会社名、時間をフォーマットする時の形式、今日の日付を出力する時の形式などを管理するために使われる。
######※config.i18n.load_pathの設定でconfig/locales以下のどの階層のディレクトリも読み込ませるようにしておくことが大事。この記述があることでディレクトリを分けることでカテゴリごとにi18nのデータを管理することができる様になる。