RailsのViewでは、繰り返し出現するHTMLは使い回しができるようにパーシャルファイルとして別ファイルにすることができます。
_post.html.erb
<article class="post"> <header class="post-title">...</header> <div class="post-body">...</div> <footer class="post-footer">...</footer> </article>
パーシャルファイルの読み込みはViewの render
メソッドで呼び出します。
= render partial: 'post'
データを渡すためのlocalsオプション
多くの場合、パーシャルファイルは様々なViewから呼び出されるので、呼び出し元からデータを渡せば柔軟なパーツにすることができます。
そこでデータを渡すには、 render
メソッドの locals
オプションを利用します。
= render partial: 'post', locals: { posts: @posts }
locals
オプションにはオブジェクトを渡します。
オブジェクトのキー名がパーシャル内で参照できる値になります。
<article class="post"> <header class="post-title"><%= @post.title %></header> <div class="post-body"><%= @post.content %></div> <footer class="post-footer"><%= @post.meta %></footer> </article>
ちなみにlocals
オプションだけ指定する場合、次のように省略形で記述することも可能です。
= render "article", post: @post