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

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

More than 5 years have passed since last update.

部分テンプレートを使う

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は併用出来ます。

shizuma
web&DeepLearningエンジニア。 ACES.inc←東京大学大学院/東京←鹿児島/blog https://blog.seishin55.com ; Qiita https://qiita.com/shizuma ; note https://note.mu/seishin55
https://seishin55.com
aces
ACES(エーシーズ)は、 画像認識を中心としたAIアルゴリズムの力で、リアル産業のDX(デジタルトランスフォーメーション)を推進し、シンプルな社会を実現する会社です。ヒトの働き方をデジタルの力で 自動化・効率化することで、誰もが生き生きと 生きられる社会を実現していきます。
https://acesinc.co.jp/
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
Comments
No 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
ユーザーは見つかりませんでした