web-dev-qa-db-ja.com

アプリケーション全体で共有されるパーシャルをRailsのどこに置くのですか?

複数のモデルで共有されている部分ファイルをどこに配置すればよいですか? 1つのモデルPhotoに使用されるcrop.html.erbというページがあります。次に、Userという別のモデルにも使用したいと思います。

私はcouldコードをコピーして貼り付けますが、それはあまりドライではないので、パーシャルに移動すると思いました。

2つのモデル間で共有されているため、--その部分をどこに配置しますか

ありがとう!

52
Yuval Karmi

Rails規約は、共有パーシャルを/app/views/shared

59
John Topley

TL; DR

Rails 3.1、Rails 4、Rails 5そして次に来るものは何でも

app/views/application

コントローラのパスにビューが見つからない場合、エンジンはこのパスを自動的に検索します。

Rails 3以前

app/views/shared

エンジンはこのパスを自動的に検索しません。


長い話

Rails(および以前のバージョン)にはデフォルトなし共有ビューを保存する場所があります。

非公式の規約は、共有ビューをapp/views/sharedに保存することです。ただし、それらを格納する場所がどこであっても、パスを指定する必要があります。

# render app/views/shared/menu.html.erb
<%= render :partial => "shared/menu" %> 

この提案は Railsを使用したアジャイルWeb開発 によって一般化されました。

Rails 3.1は、共有ビューを保存するための公式標準を導入します。
app/views/application

この標準のおかげで、エンジンはapp/views/applicationでテンプレートを自動的に検索します。その結果、完全なパスを使用する必要がなくなります

それらの好奇心が強い人は here この決定の背後にある思考プロセスに従うことができます。

古い構文

# render app/views/application/menu.html.erb
# unless menu.html.erb is found in appp/views/my_controller
<%= render :partial => "menu" %> 

新しい構文

# render app/views/application/menu.html.erb
# unless menu.html.erb is found in appp/views/my_controller
<%= render partial: "menu" %> 

もちろん、共有ビューを好きな場所に配置して、パスで参照することもできます

<%= render :partial => "my_own_special_shared_folder/menu" %>

ただし、これを行う十分な理由がない限り、新しい標準に固執し、共有ビューをapp/views/applicationに保存してください。

Rails View は、ヘッダーやフッターなどの共有パーシャルにapp/views/layoutsを使用しますが、Ruby on Rails Guideはapp/views/shared in の例 を使用しています。これは個人の好みによると思います。layoutsメインナビゲーションやフッターなどの高レベルのものには使用できますが、フォームなどのより狭いコントローラレベルのものにはshared使用できます。

4

一般的に、ビューにsharedフォルダーがあり、よく使用されるパーシャルが含まれています。

3
Toby Hede

どこに置いてもかまいません。 renderへのファイルのパスを指定することにより、任意の場所で任意の部分をレンダリングできます。それをレンダリングするコントローラーに関連付ける必要はありません。私はpartialsディレクトリの下のviewと呼ばれるディレクトリを使用し、その中で次のようにパーシャルを呼び出します。

render :partial => 'partials/mypartial'
0
Jimmy Cuadra