Ruby on railsで投稿アプリを作りたい。
その際に、userとpostモデルのある状態をまず作ろうと思ったのですが、一ついくらメンターに相談しても時間がかかったエラーがありました。
ActionView::Template::Error (undefined method `each' for nil:NilClass)
postコントローラでindexアクションに
def index
@posts = Post.all.order(id: :asc)
end
投稿したpostの内容を一覧表示にするところで、
index.html.erbに渡します
<% @posts.each do |post| %>
<%= post.title %>
<%= post.content %>
<% end %>
これで表示できるはずが、
ActionView::Template::Error (undefined method `each' for nil:NilClass)
エラーでググっても、出てくるものは@postsがnilになってるので、、とか
同じ様なエラーでも@postsが@post になってたり、全角スペースが入っていたり、、
ルーティングもOK
DBに保存もできている
showページは表示できるので、投稿自体は渡っている。
なぜ?
原因
postコントローラーのメソッドの書き順が原因でした。
index
new
create
show
edit
update
destoy
と書くのが普通なところを
new
create
index←ここ
略
とindexメソッドをnewとcreateの後に書いていたのが原因だった様です。
1日悩んで、メンターさんに相談してもなかなか進まなかったよ〜言うなれば根本的な部分だったのかも。
でも、いろんな原因を探るうちに理解できた部分も多かったのでエラーは成長には欠かせないのかもしれません。