LoginSignup
6
2

More than 3 years have passed since last update.

translation missing: ja.activerecord.errors.messages.record_invalidエラーの対処

Posted at

はじめに

Rails6.0でアプリを作成していて、タイトルのエラー画面に遭遇しました。
経緯としては、createアクションを実行した際、うまくデータベースに保存されずにはじかれたということです。なぜはじかれてしまったのかがわからず色々調べた結果、解決できたので
今回はこのエラーの解決方法についてアウトプットしたいと思います。

目次

1.そもそもどういう意味のエラーなのか
2.解決手順

1. そもそもどういう意味のエラーなのか

translation missingという文言から、翻訳が失敗しているという意味だと解釈できます。
ログイン機能を簡単に実装できるDeviseをインストールした際に、
エラーメッセージなどを日本語化するためにconfig/locales/devise.ja.ymlファイルやconfig/locales/ja.ymlファイルを編集するかと思います。

タイトルのエラーは,ja.ymlファイル内の記述で「エラーメッセージの日本語化が失敗しているから本来のエラー内容が表示できません!」という意味です。この問題を解決しないとなぜcreateアクションが成功しなかったのか理由を解明できないので、なので、まずja.ymlファイルを編集する必要があります。

2. 解決手順

ja.ymlファイルを編集します。
.errors.messagesとあるのでエラーメッセージを日本語化していきます。
インデントに気をつけましょう。

config/locales/ja.yml
ja:
  activerecord:
  errors:
    messages:
      record_invalid: "バリデーションに失敗しました: %{errors}"

上記のように記述することでエラーメッセージを日本語化することができます。
このあとのエラー内容は人それぞれですが

僕の場合は、foreign_keyに設定したカラムがnilになっていたのでそこで引っかかっていたのがデータベースに保存されない原因でした。
なので下記のように、optional: trueを設定しnilの場合でも保存されるようにしました。

event.rb
 belongs_to :recruiter, class_name: 'User', foreign_key: 'recruiter_id', optional: true
 belongs_to :applicant, class_name: 'User', foreign_key: 'applicant_id', optional: true

ちなみに、optional: trueは外部キーのnilを許可する記述です。

 おわりに

最後まで読んでいただきありがとうございました!
お疲れさまでした。。

6
2
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
6
2