【Rails】部分テンプレート作成方法
複数のviewページで共通して使われている部分を共有(部分テンプレート)することが出来ます!
メリットは...?
・同じ記述を何度も書く必要がなくなる
・修正が必要な場合、修正箇所が減る
・記述するコードが減る
・ファイルサイズを小さくすることが出来る
部分テンプレート作成手順
①部分テンプレートファイル作成
②共通のコードを切り取る
③①で作成したファイルに②を記述する
④部分テンプレート用のコードに書き換える
⑤部分テンプレートファイルを呼び出す
①部分テンプレートファイル作成
今回はspotsのnew・index・show・editページに部分テンプレートを付けたいと思います。
部分テンプレートのファイルは「_(アンダーバー)」を必ず最初に付ける決まりがあります。
_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 %>
---<ここまで切り取る✂>---
<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| %>
.
.
.
これで部分テンプレート使えました