りゅうじの学習blog

学習したことをアウトプットしていきます。

パーシャル(部分テンプレート)をrenderでlocalsオプションで呼び出す

こんにちは、りゅうじです。

render でパーシャル(部分テンプレート)を呼び出す使い方をまとめました。

localsオプション のみです。

省略しない記述をまず覚える

パーシャルを呼び出す上でオプションがあります。

部分的に省略する事ができず、省略するなら全てを省略する必要があるので、まず全てを省略しない書き方を覚えてしまいましょう!

全て書き終えた上で省略できる部分を後で消すのが一番学習効率が良いと個人的に感じています。

パーシャルを呼び出すrenderの使い方

まずパーシャルを作っておく必要があります。

articles/_form.html.erb

パーシャルのファイル名はこのようにアンダースコアを付ける必要があります。

まずコントローラーに

#articles_controller.rb
def new
  @article = Article.new
end

インスタンス変数を定義してある状態。

#articles/_form.html.erb
<%= form_with article, local: true do |f| %>
   <%= f.label :body %>
   <%= f.text_area :body %>
   <%= f.submit %>
<% end %>

ここでパーシャルじゃない時は

form_withインスタンス変数を入れるかと思いますがローカル変数で入れてください。( render のオプションでインスタンス変数を定義する事で色んな場所で使えるようにする為です)。

パーシャルではローカル変数を使うと覚えておくと良いと思います。

そしてこのパーシャルを他のviewファイルで render で呼び出します。

#articles/new.html.erb
<%= render partial: 'form', locals: { article: @article } %>

partial:の部分は部分テンプレート名を記述します。部分テンプレート名は_formとアンダーバーが付いていますが、呼び出す際は_は付けません。

この localsオプション でパーシャル内でローカル変数にしていたところにインスタンス変数を代入でき、その上で呼び出せます。

これがパーシャルを呼び出す際のlocalsオプション を使用した際の省略しない記述になります。

省略した記述

#省略しない記述
<%= render partial: 'form', locals: { article: @article } %>
#省略した記述
<%= render 'form', article: @article %>

すっきりしましたね。いきなり省略した記述で覚えてしまうとよくわからないレベルだと感じます。

 

最初にも言いましたが部分的に省略する事はできません(エラーになります)。

 

今日はここまで。

この他にも collectionオプション がありますのでまた次の記事にまとめていきます。

最後に

読んで頂いた方、ありがとうございました。