😸

【Rails】部分テンプレート

2023/10/10に公開4

応用課題を通して部分テンプレートの便利さや汎用性の高さに、これからの使用頻度も高そうなので、改めて復習しようと思います。

部分テンプレートとは

複数のページで共通して利用できるViewファイルのことです。Viewファイルを部分テンプレートとして準備しておけば、他のViewファイルに呼び出して共通して利用できるようになります。

使用例

例:

上記のようにそれぞれフォーム(①、②)や一覧(③)などを部分テンプレートにすることでindex内の記述が少なくなりすっきりすることができます。

views/users/index.html.erb
<div class='container px-5 px-sm-0'>
  <div class='row'>
    <div class='col-md-3'>
     <h2>User info</h2>
     <%= render 'info', user: current_user %>

     <h2 class="mt-3">New book</h2>
     <%= render 'books/form', book: @book %>
    </div>
    <div class='col-md-8 offset-md-1'>
     <h2>Users</h2>
     <%= link_to "グループを作成する", new_group_path %><%= link_to "グループ一覧", groups_path %>
     <%= render 'index',users: @users %>
    </div> 
  </div>
</div>

メリット

  • 上記のように記述するコードの量が減って、見やすくなる
  • 同じ記述を何度も書く必要がなくなる
  • 修正が必要な場合、修正の対象箇所を減らせる
  • 重複記述が減り、ファイルサイズを小さくできる

部分テンプレートの作成手順

  1. 共通化できる部分を探し出す
  2. 部分テンプレートファイルを作成する
  3. 共通化するコードを切り取る
  4. 部分テンプレートファイルに共通化部分を記述する
  5. 部分テンプレート用にコードを書き換える
  6. 部分テンプレートファイルを呼び出す

記述方法

ファイル名について

ファイル名の先頭にアンダースコア(_)をつける。上記の使用例①のUser infoの場合は
_info.html.erb

部分テンプレートファイルを呼び出す(手順6)

部分テンプレートを使用したいViewページのファイル内に以下を記述する。上記の使用例②のNewBookという新規投稿フォームを呼び出す場合は

views/users/index.html.erb
<%= render 'books/form', book: @book %>

上記を日本語で解説すると下記のようになります

<%= render [部分テンプレートファイルの指定], [ローカル変数]:[渡す値] %>

注意点

部分テンプレート内のインスタンス変数の使用について

部分テンプレートファイル内でインスタンス変数を利用すると、コントローラ側でインスタンス変数の名前や挙動を変更したとき、部分テンプレート側も変更しなければいけなくなり、逆に複雑化されてしまいます。

ちなみに僕は、課題作成中ここの理解が足らずインスタンス変数を使用してしまい、コントローラの記述も増えとても大変でした笑

参考

https://zenn.dev/airiswim/articles/33c3ea52cc468f
https://zenn.dev/yuu_kinkikids/articles/365881ef37e74f

Discussion

AirichanAirichan

参考にしていただきありがとうございます♪
私もスクールの時に書いたものなので
今見ると少し足らないですが…
参考になっていたら嬉しいです💞

どぅーすーどぅーすー

いつも参考にさせていただいてます🙇
あいりさんの記事、技術面以外でも振り返りや日記もとても勉強になります!
自分の理解力の低さがバレる記事ばかりですが少しずつ先輩方に近づけるように頑張ります💪

AirichanAirichan

説明のつもりで書き出しながら改めて調べてみると、分かってないことが見えてきて楽しいですよね!
今後も楽しみにしてます!🌟

振り返りや日記は、普通の振り返りの意味もあるけど、部下や仕事以外での関わりの中で将来、
教育の立場に立つときに始めたての頃の悩みや感情、行動を思い出せたら役に立つだろうし、
"あ、こんなすごい人でもこんな時代もあるなんて!!私にもできる?!"
って希望を持つ人や行動を起こせるきっかけになったらいいなーなんて思ってますw

どぅーすーどぅーすー

すごく納得しました!
今後の当事者意識のきっかけだけでなく、挫けそうになった時に初心を振り返るにもとてもいい内容だと思います!
自分も節目節目でやっていきます💪