部分テンプレート

に公開

今まで部分テンプレートの必要性があまり理解しきれていなかったので記載します。

正直、コードがスッキリする、だけの意識しかしていませんでした。

が、エラーの際、そこの記述は飛ばして、先の記述に行けることが良いメリットであると認識しました。

メリット:

  • 文字がたくさん書いてあるコードがスッキリする

  • エラーを吐いた時に、そこの部分テンプレートの部分は飛ばせる

  • 同じ記述を何度も書く必要がなくなる

デメリット:

  • あまりにも多すぎると、いちいち内容を見に行くのが面倒

作成方法

部分テンプレートファイルを作成
ファイル名の先頭にアンダースコア(_)付きのファイルが、部分テンプレートファイルとして認識されます。
共通化するコードを切り取り、
部分テンプレートファイルに共通化の対象箇所を記述する。

例文だと、この形です。
_userinfo.html.erb
_の後ろのファイル名は自分がわかりやすいものにしたら良いです。

以下、例文です

<div>
    <h2>User info</h2>
    <%= image_tag user.get_profile_image(100,100) %>
    <table>
        <tr>
            <td>name</td>  <td><%= user.name %></td>
        </tr>
        <tr>
            <td>introduction</td> <td><%= user.introduction %></td>
        </tr>
    </table>

    <%= link_to edit_user_path(user.id), class: "btn btn-outline-secondary btn-block" do %>
        <i class="fa-solid fa-user-gear"></i>
    <% end %>

    <h1>New book</h1>
    <%= form_with model: book do |f| %>
        <h4>Title</h4>
        <%= f.text_field :title %>
        <h4>Opinion</h4>
        <%= f.text_area :body %>
        <%= f.submit 'Create Book', class:"btn btn-success" %>
    <% end %>
</div>

この記載をよく使う場合、
呼び出したいところで

<%= render partial: 'userinfo', locals: {user: @user, book: @book} %>

と記載します。{}の中の記載は、部分テンプレート化した、変数を記載します。
@userなら、user: @userという形です。

partialは記載しなくても、部分テンプレートとして、機能しますが、記載しておいた方が安全です。

なぜ、安全か、までは参考記事に記載してありますので、参考記事を参照してください。

以下、参考にさせていただいた記事
https://zenn.dev/goldsaya/articles/859d452ed4b6f1

Discussion