LoginSignup
4
6

More than 3 years have passed since last update.

部分テンプレートでスッキリ!! ❏Rails❏

Last updated at Posted at 2019-11-10

部分テンプレートとは

複数のビューファイルで共通する部分をテンプレート化する。そのまま!
例えば、ヘッダーやサイドバーなどはいくつかのビューで使い回せる可能性が高い。

つくりかた

_form.html.erb
<%= form_with model: thing do |form| %>
  <%= form.text_field :name %>
  <%= form.submit %>
<% end %>

①ファイル名を_から始める。
②共通する部分のみを記述。

呼び出し方

new.html.erb
<%= render partial: "form", locals: { thing: @thing } %>
edit.html.erb
<%= render partial: "form", locals: { thing: @thing } %>

新規登録画面と編集画面です。
form_withさんが自動的にcreateアクションかupdateアクションへ振り分けてくれるおかげで、どちらも同じ記述です。

注意点としては
①partial: のあとに部分テンプレート名を記述。その際は_を除く。
_form.html.erb → partial: "form"

②locals: のあとに部分テンプレート内で使う変数を定義する。
この場合、部分テンプレート内でthingを使っていることから、コントローラーから渡された@thingをthingに変更。
locals: { thing: @thing }


ちなみに、呼び出す際に部分テンプレートが同じフォルダ内にある時は①の記述で構いません。以下。

・ views
  ・ things
    ・ _form.html.erb
    ・ new.html.erb
    ・ edit.html.erb
<%= render partial: "form", locals: { thing: @thing } %>



しかし、以下のように部分テンプレートが別のフォルダに存在する場合は、

・ views
  ・ layouts
    ・ _form.html.erb
    ・ application.html.erb 
  ・ things
    ・ new.html.erb
    ・ edit.html.erb
<%= render partial: "form/layouts", locals: { thing: @thing } %>

フォルダ名を/のあとに記述します。



また、partial,localsの省略も可能です。

<%= render "form/layouts", thing: @thing %>





ではまた!

4
6
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
4
6