#はじめに
違うファイルのビューを他のファイルのビューに表示さる際、部分的にそのビューをrenderで呼びだすことができます。
そんな、部分テンプレートの方法について紹介します。
###目次
- 部分テンプレートファイルの名前について
- renderで呼び出す
- コントローラーへの定義
#開発環境
ruby 2.6.5
rails 6.0.0
#実装
それでは実装していきます〜
#1. 部分テンプレートファイルの名前について
まず、部分テンプレートとしてビューファイルを作成する時は_index.html.erb
のようにファイル名の前に_
(アンダースコア)をつけます。
今回はproductsコントローラーのビューを部分テンプレートとして使いたいので、products/_index
となるようにファイル名を編集すます。
#2. renderで呼び出す
次にテンプレートする側にrender
メッソドを記述します。
今回は以下の記述をします。
#省略
<%= render partial: "products/index" %>
構文はこちらです。
render partial: コントローラー名/ファイル名
partialオプションは部分テンプレートを呼び出す時に使います。ただ、強調しているだけ、つけなくても呼び出せます。
これで完成!!と思ったのですが、今回@products
を定義してProductモデルからデータを取得してビューに表示してる為、topsコントローラーでも定義が必要です。
#3. コントローラーへの定義
保存したデータを呼び出す場合コントローラーでインスタンス変数
にデータを代入してビューで使用します。
productコントローラーで動かすのであればそちらに@products
を定義しますが、今回はtopsコントローラのアクションが動くのでそちらで定義する必要があります。
<h1>Products#index</h1>
<p>Find me in app/views/products/index.html.erb</p>
<div class="#">
<% @products.each do |product| %> #ここで@productsを定義してるので、コントローラーでも定義が必要です。
<%= product.name %>
<%= product.text %>
<% end %>
</div>
このproducts/_index.html.erb
が部分テンプレートとして呼び出されるので、呼び出された側のtops_contller.rb
でも@products
定義が必要です。
class TopsController < ApplicationController
def index
@tops = Top.all
@products = Product.all #部分テンプレートで_index.htmlを表示させる為の定義
end
これで完成です!!!
#まとめ
以上部分テンプレートの手順でした。
用途に応じて他にもやり方がありますが、今回はこの方法で実装してます。
###最後に
私はプログラミング初学者ですが、自分と同じ様にエンジニアを目指す方々の助けになればと思い、記事を投稿しております。
それではまた次回お会いしましょう〜