【rails】エラーメッセージ・日本語化

※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。

エラー内容を表示する

↓ の記事の内容に沿って進めていく


.errors.full_messages.each do |message|

app/views/articles/new.html.erbに以下のコードを書く

<ul>
    <% @article.errors.full_messages.each do |message| %>
      <li><%= message %></li>
   <% end %>
</ul>

railsではエラーメッセージがすでに用意されている

.errors.full_messagesで、すべてエラーメッセージを取得する

.each do |message|で、エラー状況に適したメッセージが抜き出される

設定された、Validationの種類によって判定される


エラーメッセージ

←タイトル(:title)、内容(:content)ともにブランクのまま

「保存」を押すと、エラーメッセージが表示される→

※今回はエラーがリスト表示されるようにしている

「存在しないと保存しません」というルールのもと、「ブランクはだめだよ」というエラー表示がされている


日本語表示させる

config/application.rbのclass Application < Rails::Application内に以下のコードを書く

  class Application < Rails::Application
    # Initialize configuration defaults for originally generated Rails version.
    config.load_defaults 6.0

         # 中略
    config.i18n.default_locale = :ja
  end

config.i18n.default_locale = :ja

→ 日本語をデフォルト表示させる、という意味

application.rbは、サーバーを起動したタイミングでしか読み込まないファイル

  1. warpのサーバーを一度、control+cで抜ける
  2. rails s で再度サーバーを立ち上げる
  3. このとき、application.rbが読み込まれる(変更が反映される)

ja.yml

config/locales/en.ymlには英語の表記について表記がされている

config/locales/ja.ymlを新たに作成する

railsが日本語表記したいときのコードを用意してくれているので、それを貼り付ける

追記が必要なケース

↓ デイトラの先生が用意したコード

一部のコードが書き足されている

ja:
  activerecord:
    errors:
      messages:
        record_invalid: 'バリデーションに失敗しました: %{errors}'
        restrict_dependent_destroy:
          has_one: "%{record}が存在しているので削除できません"
          has_many: "%{record}が存在しているので削除できません"
    attributes:
      article:
        title: 'タイトル'
        content: '内容'

validationに関するメッセージ、errorメッセージは特定のメッセージが決まっている

→ raile内で日本語に置き換えられるように表記してくれている

ただし、自分でカラムを決めた場合(titile:やcontent:)は、日本語表記を自分で追記しないといけない

ruby
ja:
  activerecord:
          # 中略
    attributes:
      article:
        title: 'タイトル'
        content: '内容'

エラーで接続が切れたら、warp画面にて「$ rails s」を実行
サーバーを立ち上げ直す

英語だったエラーが、日本語表示された!

#DAY12

【rails】表記の変更(yml)まとめ