erbの中で別のerbをincludeする

INDEX PAGE


erbの中で別のerbをincludeする



erbでは、他の画面と共通利用したいような部品があります。
(1)ページヘッターやページフッターのような全画面共通の部品
 ↓こういうやつですね。

(2)入力フォームなど
(3)検索結果などのスプレッドシート

(1)は <%= render :file => 'xxxx' %>

(2)、(3)は <%= render :partial => 'xxxx' %>

というように書くことで、他のerbを呼び出すことができます。
二つの違いは以下の通りです。


■render :file
 単純によそにあるerbを読み込むだけです。
 ページヘッターやページフッターのように動的ロジックはあっても
 外側からパラメーターを渡す必要の無いようなerbの読込に適しています。
 ※ファイル名に特に制約は無いです。


■render :partial
 外側からパラメーターオブジェクトを渡すことができます。
 これにより、汎用的に利用することができます。
 入力欄のモデル名や、出力すぷれっとの検索結果などを外から渡せます。

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

 なお、呼び出されるほうのerbは名前の頭に「_」がついている必要があります。
 上の例では'_form.erb'という名前になります。
 ActiveRecordのエラーメッセージを表示するために使われるのもこの機構です。

<%= render :partial => 'error' %>

↓のページでものすごくエクセレントな解説が載っていたので参考にしてください。
http://d.hatena.ne.jp/zariganitosh/20080722/1216706519


というわけで、使い分けて使ってみると便利です。


INDEX PAGE