LoginSignup
0
0

More than 1 year has passed since last update.

【Rails】部分テンプレート

Last updated at Posted at 2023-03-16

【Rails】部分テンプレート作成方法

複数のviewページで共通して使われている部分を共有(部分テンプレート)することが出来ます!

メリットは...?

・同じ記述を何度も書く必要がなくなる
・修正が必要な場合、修正箇所が減る
・記述するコードが減る
・ファイルサイズを小さくすることが出来る

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

①部分テンプレートファイル作成
②共通のコードを切り取る
③①で作成したファイルに②を記述する
④部分テンプレート用のコードに書き換える
⑤部分テンプレートファイルを呼び出す

①部分テンプレートファイル作成

今回はspotsのnew・index・show・editページに部分テンプレートを付けたいと思います。
部分テンプレートのファイルは「_(アンダーバー)」を必ず最初に付ける決まりがあります。
_new.html.erbというファイルを作ります。
スクリーンショット 2023-03-16 224120.png

②共通コードを切り取る

共通するコードを切り取ります。

view/admin/spots/new.html.erb
---<ここから>---
<% @spots.each do |spot| %>
<div>
  <%= link_to spots_path(spot.id) do %>
    <%= image_tag spot.get_image %>
  <% end %>
---<ここまで切り取る>---

<p><%= link_to "プロフィール編集", 〇〇_path(@〇〇) %></p>
  <% end %>
</div>

③ ①で作成したファイルに②に記述(貼り付け)

①で作成した_new.html.erbファイルに②で切り取りしたコードを貼り付けます。

view/admin/spots/_new.html.erb

<% @spots.each do |spot| %>
<div>
  <%= link_to spots_path(spot.id) do %>
    <%= image_tag spot.get_image %>
  <% end %>

④部分テンプレート用のコードに書き換える

部分テンプレート内でインスタンス変数を使用すと、コントローラを変更した際に、部分テンプレート内も変更の必要が出てきてしまい面倒になります。
そこで、部分テンプレート内のインスタンス変数をローカル変数に変更します!
その方法とは... 「@」を取るだけです

<% @spots.each do |spot| %>
<div>
  <%= link_to spots_path(spot.id) do %>
    <%= image_tag spot.get_image %>
  <% end %>

@これを外します!

<% spots.each do |spot| %>
<div>
  <%= link_to spots_path(spot.id) do %>
    <%= image_tag spot.get_image %>
  <% end %>

⑤部分テンプレートファイルを呼び出す

newのviewファイルに<%= render 'new', spots: @spots %>を記述する。

view/admin/spots/new.html.erb

<%= render 'new', spots: @spots %> #これを記述すると部分テンプレートファイルを呼び出せる

<p><%= link_to "プロフィール編集", 〇〇_path(@〇〇) %></p>
  <% end %>
</div>
        .
        .
        .

new以外のviewファイルには下記のように記述する。
admin/spots/newを使う

view/admin/spots/index.html.erb

<%= render 'admin/spots/new', spots: @spots %> #このように記述する

<h1>投稿一覧</h1>

<% @spots.each do |spot| %>
        .
        .
        .

これで部分テンプレート使えました:relaxed:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0