アジェンダ
- この記事の対象者
- 開発環境
- シンプルなコード例
- コード全体の流れ
- よくある記述ミス
- つまづきがちなエラー
- ここで抑えるべき用語
- 最後に
この記事の対象者
- Railsを学び始めて1か月程度
- each文って結局どのように動いてるのかわからない
開発環境
- Rails5
- windows10
- vagrant
each文の最もシンプルなコード例と出力
投稿内容.
id: 1
title: タイトル
body: ボディ
id: 2
title: title
body: body
id: 3
title: たいとる
body: ぼでぃ
test.controller.rb
def index
@books = Book.all
end
index.html.erb
<% @books.each.do |book| %>
<%= book.id %><br>
<%= book.title %><br>
<%= book.body %>
------------
<% end %>
表示.
1
タイトル
ボディ
------------
2
title
body
------------
3
たいとる
ぼでぃ
------------
全体の流れ
- @booksに投稿をすべて格納する(Book.all)
- <% @books.each do |book| %>によって投稿をひとつひとつにわけて|book|に格納する
- book.title等で、ひとつひとつのレコードを順番に取り出す
※each do ~ endまでにあるものを投稿の数だけ繰り返す。
(上記コード例で「------------」が三回繰り返されている)
よくある記述ミス
- <%= @books.each do |book| %>としてしまう
- カラム名など余計なものも表示されてしまう(ここでは割愛するが、実際に自分でやってみるとよい)
-
@books をcontrollerで定義していない
- viewファイルとcontrollerの該当アクションのインスタンス変数の数が同じかどうかを確認すること
- <% end %>がない
- syntax errorがでてしまう
つまづきがちなエラー
undefined method `each' for nil:NilClass
- @books.each do の場合@booksに変数が入っていないことが多い
これはeachだけでなくエラー文作成の際に起こるundefined method `errors' for nil:NilClassなどにもいえる。
controllerを再度確認すること。
用語
- ブロック変数 → |book|のこと。
最後に
each文は初学者のつまづきやすいポイントです。
ただ一回イメージをつかめればなんてことないもので、使えればとても便利なものなので必ず習得しましょう!
また、初投稿のため抜け落ちている部分、間違っている部分等あるかもしれませんが、
その際はご指摘いただけると嬉しいです!
ご覧頂きありがとうございました。
(もし気に入っていただけたらLGTMお願いします)