web-dev-qa-db-ja.com

「グローバル」共有部分テンプレートをどのフォルダに配置する必要がありますか?

Ruby on Rails 3.0.7を使用しており、パーシャルテンプレートを使用する予定です。アプリケーションのすべてのクラスが同じパーシャルを使用するため、決定する必要があります。それらすべてをどこに配置するか。

「グローバル」共有部分テンプレートをlibフォルダーに配置することをお勧めしますか?いいえの場合、それらを配置するフォルダーを選択する一般的な方法は何ですか?そのフォルダに適切な名前を付けてロードする方法について何かアドバイスはありますか?

43
Backo

標準では、すべての共有パーシャルをapp/views/sharedに配置し、それらを次のように参照しています。

render :partial => 'shared/partial_name'

標準の「リスト内の行」パーシャルがある場合(たとえば、インデックスページの場合)、次のような共有パーシャルを使用できます。

# To render a single object row:
render :partial => 'shared/item', :locals => { :item => @item }
# Or to render them all:
render :partial => 'shared/item', :collection => @items
54
venables

Rails 4:

アプリケーション全体で使用する予定のパーシャルを/app/views/applicationに入れます

次に、アプリケーションのどこにいても簡単に次のことができます。

render partial: 'partial_name', variable_name: variable

追加の利点は、/app/views/controller_name/_partial_name.html.erbでそのパーシャルの意味を再定義することにより、特定のビュースペースのパーシャルをいつでもオーバーライドできることです。パーシャルの呼び出しは、現在のより具体的なコンテキストを参照します。アプリケーションレベルを部分的に取得することはできません。

Thoughtbot からの提案

16
Charles Smith

規則はそれらをapp/views/sharedの下に置くことです

多くのパーシャルを使用する場合は、アプリケーションにとって意味のあるものであれば、そのフォルダーのサブディレクトリに配置することをお勧めします。1つのディレクトリに多くのパーシャルを含めることは一般的に良い習慣ではないためです。

4
Chubas