(Rails) エラーを読んでみよう
rails のエラーについて
railsで何かプログラムを作っていると、様々なエラーに直面すると思います。 そこでエラーの意味と怪しい場所について説明します。
今回説明する怪しい部分、対策法は一例ですので、必ずにもその部分を直した結果エラーが改善するとは限りません。ご了承ください。
NoMethodError
これは、method(機能)がうまく使えないときにでるエラーです。
undefined method `title' for nil:NilClass
意味:nil:NilClass の未定義のメソッド `title'(Google翻訳より)
意訳:titleというものは*nilには対応していない
*nil:空白クラスと呼ばれるもの,未定義の時にこのクラスに分類される,何も入っていないと思っても大丈夫
対策:titleが間違っているか、titleの前の@bookが未定義となっていると思われるため、Controllerにて定義がされていないと思われるので、Controllerでしっかりと、@bookが定義されているかを確認する。
詳細:@bookの情報がtitleに流れるが、その際@bookには何も入っていないため、titleは「何もない情報」を受け取ることになる。この時、titleは何もない情報を受け取れない(対応していない)のでエラーが発生する。
NameError
定義されていない変数(variable)やメソッド(method)が使われている。
undefined local variable or method `back' for #<ActionView::Base:0x007f8cbcb56878>
意味:#<ActionView::Base:0x007f8cbcb56878> の未定義のローカル変数またはメソッド「back」(Google翻訳より)
意訳:backというものを私(rails)は知らないよー
対策:backというものを定義するetc...
詳細:今回は、link_toでbackという文字そのものを表示させたかったため、"back"にして、<%=link_to "back", books_path%>という形にした。
Routing Error
urlで検索したページがroutesに記述されていない
No route matches [GET] "/index"
意味:[GET] "/index" に一致するルートはありません(Google翻訳より)
意訳:urlで検索したページがroutesに記述されていない
対策: urlのスペルミス,routesへの書き込み不足を疑う。
詳細:/indexではなく、/booksだったので、urlの部分を/indexに直した。
ArgumentError
0個渡して、2個受け取ろうとしているので、数がおかしい。
wrong number of arguments (given 0, expected 2)
意味:引数の数が間違っています (指定された 0、予想される 2)(Google翻訳より)
意訳:受け取り口が2つあって、0個渡しているからちゃんと2個渡してね
対策: def test(width,height)の部分を削除する,testを呼び出している部分に(100,100)等で2個渡して挙げるようにする。
詳細:今回は@book.testの方に(100,10)と追加させた。
まとめ
このように基本的にエラーに関しては英語で書いてあり、慣れていくとエラーの意味が分かるので、エラーが出た際に一度読む癖をつけるのがおすすめです。