テンプレートを作っていくうちに「ここは複数の箇所で使い回しできるなあ」と思う場面があります。
ここではそのような場面に遭遇した時の説明をしたいと思います。
renderメソッド
viewテンプレート内では
renderメソッドを使用することができます。
このrenderメソッドを使用することで、部分テンプレート(パーシャルともいう)の読み込みを行うことができます。
以下簡単な例になります。
app/views/_form.html.erb
# 使い回したい検索フォームコード
app/views/index.html.erb
<p>一覧画面</p>
<%= render 'form', task: @task %>
フォームを定義したファイルをindexのテンプレートから呼び出しています。
render 'form'
のように記述すると、ファイル名が「_ 」で始まるテンプレートファイルから探索します。
formと記述しているが、実際に探索するテンプレートファイル名は'_form'となります。
layoutテンプレート
layoutテンプレートとは特定の構造をコンポーネントとして共通化する以外に、headタグやよくあるヘッダーやフッターの共通であるのが一般的になります。
そういった「外側」のレイアウトをテンプレートとして扱う仕組みもあります。
以下簡単な例になります。
app/views/show.html.erb
# テンプレートしたいコード
app/views/layouts/application.html.erb
<body>
<%= yield %>
</body>
このようにすることでyieldの部分にテンプレート化したいコンテンツが展開されるようになりました。