はじめに
本記事はプログラミング初心者が、「現場で使える RubyonRails5 速習実践ガイド」(通称)「現場Rails」で学習を進めていくにあたって、つまずいた点、バージョンの違いによるエラーが出た点などを解決した方法を備忘録も兼ねてまとめているものです。
そのため、記事の内容には誤りがある可能性があることをご理解ください。
誤りがあればお手数ですが、ご指摘いただければと思います。よろしくお願いします。
環境
Ruby 3.1.2
Rails 7.0.3.1
エラーが表示されない
・名称を入力せずに登録しようとした時、赤枠のところに日本語でエラーメッセージが出てくるはずなのですが、出てきませんでした。(レイアウトが整っていないのは、ご了承ください💦)
まず、そもそもエラーとして認知されているのかを確認します。
コンソールで確認
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
def create
@task = Task.new(task_params)
if @task.save
redirect_to @task, notice: "タスク「#{@task.name}」を登録しました"
else
render :new
end
end
のrender :newの後に
def create
@task = Task.new(task_params)
if @task.save
redirect_to @task, notice: "タスク「#{@task.name}」を登録しました"
else
render :new, status: :unprocessable_entity
end
end
日本語にならない
しかしながら、どんなエラーが発生しているのかは、ユーザーからは理解できません。日本語にするために、以下のサイトを参考にしました。
rails-i18nというgemが必要なようです。
ひとまず、以下のようにライブラリを追加して、bundleでインストールしましょう。
gem 'rails-i18n'
次に、config/application.rbに以下の一文を追記します。
config.i18n.default_locale = :ja
これでなんとか、バリデーションエラーを日本語で表示することができました。
記事を書いてみて思ったのですが、想像以上に体力を奪われますね...
素敵で、内容の濃い記事を書いてくださる皆様には感謝しかないです。自分にも相手にもみやすい記事を少しずつ心がけながらやっていこうと思います。