エラーの原因箇所の見つけ方(NoMethodError)

gyazo.com

NoMethodErrorの原因が中々わかりづらいので考え方を記録していきます。

 

まず、NoMethodError in Devise::Registrations#create

deviseの新規登録時のcreateアクションのメソッドがない。

 

undefind method 'day'for"1=>1930,2=>1,3=>2":string

dayというメソッドがない。"1=>1930,2=>1,3=>2"は新規登録の年号。stringはREADME.mdで作成したtype。

 

f.date_select

日付の入力に特化した選択ボックスを生成するメソッド。

 

ここからNoMethodErrorだから何か定義してないのかな?と考えるもdayは自分で定義していない。

f.date_selectは、公式ドキュメントを見ても構文通り。

 

undefind method 'day'for"1=>1930,2=>1,3=>2":string

のstringは文字列を表す物なのに日付の数字に使っている。

ここがおかしいかもしれないと、stringを記述しているREADME.mdを見るとTypeがstringになっている。

日付に使うdateに直すと、エラーがなくなった。

 

まとめ

今回エラー文で気づかなければいけないのは、日付にsrting(文字列)を使っていること。

ユーザー管理機能を作っているのにREADME.mdは見直さないので、日付はdateを使うこと覚えていないと中々気づけない。

いくら自由に検索してもいいとは言え、ある程度の基礎知識は頭にないとつまづくポイントが増えることに気づかされた。