今回のエラーは強敵でした。
中々原因が分からずかなり苦戦しました。
とりあえず、真夜中ですが忘れないうちに備忘録書きます。
###エラーに至った経緯
アプリ作成時すぐにdeviseでユーザー管理機能を作成し、
カラムを追加で足しました。
動物関連のアプリを作っていたので、追加で足したカラム名は
keep_petとnumber_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に保存できるようになります。
###まとめ
これっぽっちのエラーでもまた一つ覚えることができたのはいい収穫。
新たなエラーに出くわしても挫けず頑張りたいと思った今日この頃。