はじめに
本記事では、renderメソッド記述時のインスタンス変数の動きをまとめました。
初学者の方々はとても重要な部分になります。
ぜひ覚えましょう。
renderメソッドとは
部分テンプレートを呼び出す
際に利用するメソッドです。
呼び出す部分テンプレートは、partialというオプションで指定します。
###partialオプション
部分テンプレート名を指定することで、該当する部分テンプレートを表示できます。
(例)_form.html.erbという部分テンプレート呼出
<% render partial: "form" %>
###localsオプション
部分テンプレート内でその変数を使えるようになります。
local『s』です!!
localではありません。
sを忘れてはなりません!!
<% render partial: "sample", locals: { post: "Sunplaza_Nakano" } %>
上の記述では、
部分テンプレート内において「Sunplaza_Nakano」という
文字列の代入されたpostという変数が使えるようになります。
本題です
インスタンス変数がいろんなところで受け渡しされます。
(例)
今回は、newアクションを焦点にしていきます。
コントローラーでインスタンス変数「@prototype」を生成し、ビューへ渡します。
class PrototypesController < ApplicationController
def index
@prototypes = Prototype.all
end
def new
@prototype = Prototype.new
end
・
・
・
省略
・
・
・
end
ビューが「@prototype」を貰います。
その後、部分テンプレートを生成する機会があったとし、renderメソッドを使用します。
そこで、部分テンプレート用にlocalsの部分で、
「@prototypes」をさらに「prototype」という変数にします。
その後、前述で説明した「partialオプション」にて"form"の指定があるので、
_form.html.erbへ「prototype」を渡します。
<div class="main">
<div class="inner">
<div class="form__wrapper">
<h2 class="page-heading">新規プロトタイプ投稿</h2>
<%# 部分テンプレートでフォームを表示する %>
<%= render partial: "form", locals: { prototype: @prototype } %>
</div>
</div>
</div>
_form.html.erbにて「prototype」を貰います。
formメソッドに着目すると、
「model:prototype」
と記述されています。
<%= form_with model: prototype, local: true do |f|%>
<div class="field">
<%= f.label :title, "タイトル" %><br />
<%= f.text_field :title, id:"prototype_title" %>
</div>
・
・
・
省略
・
・
・
<% end %>
このように変数たちは移動しています。
この移動は、アクションごとに追う必要があります。
注意しましょう。
終わりに
現在、学習中のカリキュラムをほぼ終え、
自分の手で、コードを記述しているフェーズになっています。
その際に、理解しているようで理解していなかった部分を今回記事にしました。
引き続き、頑張りましょう!!