renderメソッドについて(Action Viewでの使用)

Action viewのパーシャルに使用する

複数のviewで共通部分がある場合、部分テンプレートとして共通化することができます。

部分テンプレートの命名規則について

パーシャル化する部分のファイルの名前は_(アンダースコア)を付けるのが
普遍的な命名規則です。
例:_header.html.slim

renderを使用して呼び出す

「app/views/layouts/_header.html.slim」という部分テンプレートを呼び出したい場合、以下のように呼び出します。

<%= render 'layouts/header' %>


renderメソッドで呼び出す際は、ファイル名の_(アンダースコア)、 拡張子は省略します。 また、呼び出し元と呼び出し先が同じディレクトリの場合はファイル名のみでOkです。

<%= render 'header' %>

partial

部分テンプレートを呼び出す為のオプションです。

locals

部分テンプレートで使用するローカル変数を定義するオプションです。
また、複数のローカル変数を定義することができます。

<%= render partial: 'form', locals: { board: @board, comment: @comment } %>

また、2つのオプションのみを使用する場合は以下のように省略できます。

<%= render 'form', { board: @board, comment: @comment }  %>

片方のみオプションを明示しているとエラーになるので注意です!!

<%= render partial: 'form', { board: @board, comment: @comment }  %> #=> エラー!!
<%= render 'form', locals: { board: @board, comment: @comment }  %>  #=> エラー!!

colletion

collectionで指定した変数内の要素分だけ、部分テンプレートが繰り返しで表示されます。

<%= render partial: 'form', collection: @users %>

この場合、部分テンプレートでのローカル変数はuserとなるので注意!!

部分テンプレートでのローカル変数の名前を変更したい場合はasオプションを使用します。

<%= render partial: 'form', collection: @users, as: 'hoge' %>
# => formテンプレートでの代入先の変数はhogeとなる!!

collectionオプションを省略したい場合は以下の2つの条件を満たす必要があります。
(上のコードを例に説明しています)
- 呼び出す_form.html.erbformsディレクトリにある。
- 部分テンプレートで使用する変数名がuserである。

これを満たしている場合

<%= render @users %>

部分テンプレートを作成する際の注意点

  • インスタンス変数を使用しない !!
    これはcontrollerと結びついてしまい、再利用性が低下してしまう為