環境:
Ruby 2.6.3
発生事象:
undefined method `each' for nil:NilClass
結論:
エラーが出たので探っていくと、コードの後ろに全角スペースがある。
恐怖の全角スペースエラー探しを、身をもって味わいました。
viewファイルがこちら:
h1.c-page_title 日記一覧
= link_to '日記の登録', new_diary_path, class: 'c-btn'
table.c-table
tbody.c-table__body
- @diaries.each do |diary|
tr.c-table__tr
td.c-table__td = link_to diary.title, diary, class: 'c-link'
td.c-table__td = diary.created_at
コントローラー:
class DiariesController < ApplicationController
def index
@diaries = Diary.all
end
def show
end
このindex の後ろに、全角スペースが隠れておりました。
過程:
エラーの意味は、undefined method `each' for nil:NilClass
→つまり「each」メソッドがないから、そんなものは実行できない、という意味です。
したがってここの @diaries が nil らしい。
次に@diariesというインスタンス変数は、コントローラで作成されている。
コントローラが怪しいが一見大丈夫。
スペルを何度もみても、間違えていない。
カーソルを合わせて一つ一つみていくと、、、
あれ、??スペース入っっとる。消してきれいにしよう。
と思い消すと、なんということでしょう!
輝かしいバグが消えました!(やったー!)
indexアクションはindex[全角スペース]で定義されてしまっていたので、
アクションで呼び出した時に、indexがないよ!となって、その結果htmlファイルを実行できない状態でした。(たぶん)
補足:
ちなみに @diaries = Diary.all の後ろだけに全角スペースが入った場合は、
こんな感じで別のエラーです。
undefined method `all ' for #<Class:0x00007fe88a13ae28> Did you mean? all
気をつけてください。