renderの繰り返し処理の正しい表記方法について

どうもどハマりエンジニアです。

 

本日はrenderを使う際にeachを使って初心者は使いがちになってしまい、パフォーマンスを落としてうことが多いです。(実際私もそうでした)

 

 

下記の流れのように最終的には 「render @user」だけで済む上に、パフォーマンスも向上するなんて一石二鳥!ぜひこちらを使うようにしよう!

 

 

app/views/users/index.html.erb

<% @users.each do |user| %>  
<p>Name: <%= user.name %></p>  
<% end %>  
ERB

いくつものファイルで同じ処理が出てくるとき、パーシャルファイルを作成してまとめることができる。

app/views/users/_user.html.erb

<p>Name: <%= user.name %></p>    
ERB

app/views/users/index.html.erb

<% users.each do |user| %>    
<%= render partial: 'user', locals: { user: user } %>  
<% end %>  
ERB

※locals: { user: user } はパーシャル内でuserを使えるようにしている。

上記の記述はさらに短くできる。

app/views/users/index.html.erb

<% users.each do |user| %>    
<%= render 'user', user: user %>  
<% end %>  
ERB

そしてなんと、さらにさらに短くできる。

app/views/users/index.html.erb

<%= render @users %>  
ERB

これだけでRailsがパーシャルファイルを探し出して、中の処理を行ってくれる。