はじめに
Rails6.0でアプリを作成していて、タイトルのエラー画面に遭遇しました。
経緯としては、createアクションを実行した際、うまくデータベースに保存されずにはじかれたということです。なぜはじかれてしまったのかがわからず色々調べた結果、解決できたので
今回はこのエラーの解決方法についてアウトプットしたいと思います。
目次
1. そもそもどういう意味のエラーなのか
translation missingという文言から、翻訳が失敗しているという意味だと解釈できます。
ログイン機能を簡単に実装できるDevise
をインストールした際に、
エラーメッセージなどを日本語化するためにconfig/locales/devise.ja.yml
ファイルやconfig/locales/ja.yml
ファイルを編集するかと思います。
タイトルのエラーは,ja.yml
ファイル内の記述で「エラーメッセージの日本語化が失敗しているから本来のエラー内容が表示できません!」という意味です。この問題を解決しないとなぜcreateアクションが成功しなかったのか理由を解明できないので、なので、まずja.yml
ファイルを編集する必要があります。
2. 解決手順
ja.ymlファイルを編集します。
.errors.messages
とあるのでエラーメッセージを日本語化していきます。
インデントに気をつけましょう。
ja:
activerecord:
errors:
messages:
record_invalid: "バリデーションに失敗しました: %{errors}"
上記のように記述することでエラーメッセージを日本語化することができます。
このあとのエラー内容は人それぞれですが
僕の場合は、foreign_key
に設定したカラムがnilになっていたのでそこで引っかかっていたのがデータベースに保存されない原因でした。
なので下記のように、optional: true
を設定しnilの場合でも保存されるようにしました。
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を許可する記述です。
おわりに
最後まで読んでいただきありがとうございました!
お疲れさまでした。。