Help us understand the problem. What is going on with this article?

Rails作業MEMO - CollectionをRenderする

More than 1 year has passed since last update.

概要

Viewでの繰り返し部分を、eachメソッドを使用するのではなく、コレクションをレンダリングすることで実装する。

Version

Ruby: 2.3.1
Rails: 5.0.1

コード

views/xxx.html.erb
<% @users.each do |user| %>
  <ul class="lists">
    <li class="list">#{user.name}</li>
  </ul>
<% end %>

上記は以下に書き換え可能

views/yyy.html.erb
<ul class="lists">
  <%= render partial: "user", collection: @users %>
</ul>
_user.html.erb
<li class="list">#{user.name}</li>

POINT
・ Partial内の変数名、Partialの値、Collectionの値の関係性に注意

パーシャルはデータの繰り返し (コレクション) を出力する場合にもきわめて便利です。:collectionオプションを使用してパーシャルにコレクションを渡すと、コレクションのメンバごとにパーシャルがレンダリングされて挿入されます。

(中略)

パーシャルを呼び出す時に指定するコレクションが複数形の場合、パーシャルの個別のインスタンスから、出力するコレクションの個別のメンバにアクセスが行われます。このとき、パーシャル名に基づいた名前を持つ変数が使用されます。(Railsガイド)。

→コレクションの数だけパーシャルが挿入される。
→変数名 = パーシャル名。

初めてこの方法を使用した際に、変数名とパーシャル名を一致させておらずハマったのでメモ。

参考

Railsガイド
Qiita / Rails 部分テンプレートの使い方

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away