LoginSignup
1
0

More than 3 years have passed since last update.

deviseによる[ ~~ must exist ] によるエラー

Posted at

今回のエラーは強敵でした。
中々原因が分からずかなり苦戦しました。
とりあえず、真夜中ですが忘れないうちに備忘録書きます。


エラーに至った経緯

アプリ作成時すぐにdeviseでユーザー管理機能を作成し、
カラムを追加で足しました。
動物関連のアプリを作っていたので、追加で足したカラム名は
keep_petnumber_of_petsを足しました。
その時は何事もなくユーザーの新規登録ができました。
アプリ制作も順調に進み、編集と削除の機能を追加しました。

機能を確かめる為に、
ここで新しくid2新規ユーザーに登場してもらおうと思い、
ユーザー新規登録画面に行きました。

 

ここでエラー発生

全ての項目を埋めて、新規登録ボタンを押すと、

1 error prohibited this user from being saved:
1つのエラーにより、このユーザーの保存が禁止されました。
             Pet must exist

上記のエラーメッセージが出てきました。
Pet must existとは一体何ですか!?
カラムに間違いはなく、アソシエーションもdevise用のストロングパラメータの記述も完璧なはずだった。
なのに、どうしてか全く分からず完全に詰んだ..と思っていながら調べては試しを繰り返しやっと解決に至りました。

解決方法

結論、アソシエーションに問題がありました。
belongs_to :userだけでいいと思っていたら、間違っていたみたいです。
正解は↓

belongs_to :user, optional: true

optional: true

belongs_toの外部キーのnilを許可するというものだそうです。
外部キーに値がセットされていない場合はバリデーションが作動するせいでエラーが起きていたそうです。
optional: trueを設定しておくと、外部キーがnilであってもDBに保存できるようになります。

 

まとめ

これっぽっちのエラーでもまた一つ覚えることができたのはいい収穫。
新たなエラーに出くわしても挫けず頑張りたいと思った今日この頃。

1
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
1
0