Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
295
Help us understand the problem. What is going on with this article?

More than 5 years have passed since last update.

@shizuma

Rails 部分テンプレートの使い方

部分テンプレートを使う

View内で共通パーツ、繰り返し処理をするパーツは部分テンプレートを使います。
以下、説明の中の例ではArticleモデルがあって、titleというカラムを持つものとして説明します。

基本形

partialに指定したテンプレートを呼び出します。
テンプレート名の先頭には"_"を付けます。

<%= render :partial => "(template_name))" %>

render部分で_article.html.erbを読み込みます。

articles/index.html.erb
<%= render :partial => "article" %>
articles/_article.html.erb
<p>articleです</p>

変数を渡す

基本形は単純にテンプレートの表示を行いましたが、部分テンプレートに変数を渡してみたいと思います。

<%= render :partial => "(template_name))", :locals => { (ローカル変数名): (渡す値) } %>

render部分で_article.html.erbを読み込みます。

articles/index.html.erb
<%= render :partial => "article", :locals => { title: @article.title } %>
articles/_article.html.erb
<p>articleのタイトルは<%= title %>です</p>

これで title部分で @article.titleが入ります。

補足

以下でも表示は同様に実現出来ます。
インスタンス変数を直接部分テンプレート内で使用しています。

articles/index.html.erb
<%= render :partial => "article" %>
articles/_article.html.erb
<p>articleのタイトルは<%= @article.title %>です</p>

しかし、

  • 部分テンプレートで使う変数が不明確。
  • 再利用性が低い

といった観点からよくない書き方となります。
詳しくは
Railsの部分テンプレートからインスタンス変数を参照するのはやめよう。
が参考になります。

部分テンプレートを繰り返し表示する

「一つの記事項目をテンプレート化して、それを繰り返し表示することで一覧を表示する」ように部分テンプレートを繰り返し処理したい場合があります。
そのときに、便利な方法があります。

<%= render :partial => "(template_name))", :collection => (繰り返し表示させるためのインスタンス) %>

render部分で_article.html.erbを読み込みます。
@articlesの要素の数だけ部分テンプレートが繰り返されます。

articles/index.html.erb
<%= render :partial => "article", :collection => @articles %>
articles/_article.html.erb
<p>articleのタイトルは<%= article.title %>です</p>

ここで、ローカル変数は:partialで指定したものになります。(例のarticle)
ただし、ローカル変数を別の名前で使用したい場合はasオプションを使います。

articles/index.html.erb
<%= render :partial => "article", :collection => @articles, :as => "ele" %>
articles/_article.html.erb
<p>articleのタイトルは<%= ele.title %>です</p>

補足

localsとcollectionは併用出来ます。

295
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  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
295
Help us understand the problem. What is going on with this article?