LoginSignup
0
0

More than 1 year has passed since last update.

Ruby on Rails の each文をマスターしよう!!(初投稿)

Last updated at Posted at 2021-02-26

アジェンダ

  • この記事の対象者
  • 開発環境
  • シンプルなコード例
  • コード全体の流れ
  • よくある記述ミス
  • つまづきがちなエラー
  • ここで抑えるべき用語
  • 最後に

この記事の対象者

  • 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
たいとる
ぼでぃ
------------


全体の流れ

  1. @booksに投稿をすべて格納する(Book.all)
  2. <% @books.each do |book| %>によって投稿をひとつひとつにわけて|book|に格納する
  3. 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お願いします:bow::sweat_drops:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0