部分テンプレートとは
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で使うことはできないみたいです。