0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Ruby]renderメソッド記述時のインスタンス変数の動き

Posted at

はじめに

本記事では、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 %>

このように変数たちは移動しています。

この移動は、アクションごとに追う必要があります。
注意しましょう。

終わりに

現在、学習中のカリキュラムをほぼ終え、
自分の手で、コードを記述しているフェーズになっています。

その際に、理解しているようで理解していなかった部分を今回記事にしました。

引き続き、頑張りましょう!!

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?