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.erb
がforms
ディレクトリにある。
- 部分テンプレートで使用する変数名がuser
である。
これを満たしている場合
<%= render @users %>
部分テンプレートを作成する際の注意点
- インスタンス変数を使用しない !!
これはcontrollerと結びついてしまい、再利用性が低下してしまう為