LoginSignup
0
0

More than 1 year has passed since last update.

バリデーションエラーが日本語で表示されない。

Last updated at Posted at 2022-08-01

はじめに

本記事はプログラミング初心者が、「現場で使える RubyonRails5 速習実践ガイド」(通称)「現場Rails」で学習を進めていくにあたって、つまずいた点、バージョンの違いによるエラーが出た点などを解決した方法を備忘録も兼ねてまとめているものです。
そのため、記事の内容には誤りがある可能性があることをご理解ください。
誤りがあればお手数ですが、ご指摘いただければと思います。よろしくお願いします。

環境

Ruby 3.1.2
Rails 7.0.3.1

エラーが表示されない

スクリーンショット 2022-08-01 17.29.00.png

・名称を入力せずに登録しようとした時、赤枠のところに日本語でエラーメッセージが出てくるはずなのですが、出てきませんでした。(レイアウトが整っていないのは、ご了承ください💦)
まず、そもそもエラーとして認知されているのかを確認します。

コンソールで確認

コンソール
task2leaf % rails c  #コンソールを起動

Loading development environment (Rails 7.0.3.1)
irb(main):001:0> task = Task.new #インスタンスを作成
=> #<Task:0x000000010c7bf298 id: nil, name: nil, description: nil, created_at: nil, updated_at: nil> #名称がnil(空)であることを確認
irb(main):002:0> task.save #保存処理してみる
=> false #保存できていない。

バリデーションは機能しているみたいです。
以下のサイトを見ていると、バージョンの違いであることが判明。

Rails7からデフォルトでturboが導入されたことにより、以下の記述を追加する必要があるようです。
status: :unprocessable_entity

task_controller.rb
  def create
    @task = Task.new(task_params)

    if @task.save
      redirect_to @task, notice: "タスク「#{@task.name}」を登録しました"
    else
      render :new
    end
  end

のrender :newの後に

task_controller.rb
  def create
    @task = Task.new(task_params)

    if @task.save
      redirect_to @task, notice: "タスク「#{@task.name}」を登録しました"
    else
      render :new, status: :unprocessable_entity
    end
  end

こうすることで、エラーメッセージが表示されました。
スクリーンショット 2022-08-01 17.47.28.png

日本語にならない

しかしながら、どんなエラーが発生しているのかは、ユーザーからは理解できません。日本語にするために、以下のサイトを参考にしました。
rails-i18nというgemが必要なようです。

ひとまず、以下のようにライブラリを追加して、bundleでインストールしましょう。

gem 'rails-i18n'

次に、config/application.rbに以下の一文を追記します。

config.i18n.default_locale = :ja

スクリーンショット 2022-08-01 17.55.26.png

これでなんとか、バリデーションエラーを日本語で表示することができました。

記事を書いてみて思ったのですが、想像以上に体力を奪われますね...
素敵で、内容の濃い記事を書いてくださる皆様には感謝しかないです。自分にも相手にもみやすい記事を少しずつ心がけながらやっていこうと思います。

0
0
0

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
  3. You can use dark theme
What you can do with signing up
0
0