57
60

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 5 years have passed since last update.

railsで部分テンプレートについてまとめてみた

Last updated at Posted at 2017-07-21

部分テンプレートとは

HTML構造の部分を共通化することによって、無駄なくビューファイルを作成することが出来ます。この共通化された部分を、 部分テンプレートといいます。

render

部分テンプレートを用いる際に呼び出すメソッドです。
基本的な使い方は

<%= render partial: "部分テンプレート名" %>

pertialとはレンダリング処理を扱いやすい単位に分割するためのしくみです。パーシャルを使用すると、特定部分を別ファイルに保存しておくことが可能です。
部分テンプレートの名前は_から始まりますので例えば

<%= render partial: "sample" %>

これだと_sample.html.erbのファイルに書いていきます。

部分テンプレートにローカル変数を渡すことも可能です。

<%= render partial: "sample", locals: { sample: "hello" } %>

これだと、_sampel.html.erbファイルでhelloと代入された文字列がsampleとして使えます。

部分テンプレートは繰り返し表示に使う場合もあります。

<% @users.each do |user| %>
  <%= render partial: "user", locals: { user: user } %>
<% end %>

さらにここから短く書くことも出来ます。

<%= render partial: "user", collections:  "@users" %>

とすることもできます。データの繰り返し表示をする場合にはcollectionオプションを使います。こうすることでeachを使わないで書くことができます。
さらに短く書くことも可能です。

<%= render @users%>

いうような記述でも上の二つと同じように繰り返し表示として使えます。

補足(controllerで使う時のrenderについて)

def index
  @group = Group.find(params[:id])
  render :new
end

def new
  @group = Group.new 
end

indexアクションがよばれた場合、indexのviewが呼ばれるのではなく、
newのviewに飛びます。その時にindexアクションの@groupを保持してnewのviewに飛ぶことができるのですが、newアクションで書かれた、@groupをnewのviewで使うことはできないみたいです。

参考資料

Railsガイド https://railsguides.jp/layouts_and_rendering.html

57
60
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
57
60

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?