(Rails) エラーを読んでみよう

rails のエラーについて

railsで何かプログラムを作っていると、様々なエラーに直面すると思います。 そこでエラーの意味と怪しい場所について説明します。

今回説明する怪しい部分、対策法は一例ですので、必ずにもその部分を直した結果エラーが改善するとは限りません。ご了承ください。

  1. NoMethodError
  2. NameError
  3. Routing Error
  4. ArgumentError

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)と追加させた。

まとめ

このように基本的にエラーに関しては英語で書いてあり、慣れていくとエラーの意味が分かるので、エラーが出た際に一度読む癖をつけるのがおすすめです。