複数のモデルで共有されている部分ファイルをどこに配置すればよいですか? 1つのモデルPhoto
に使用されるcrop.html.erb
というページがあります。次に、User
という別のモデルにも使用したいと思います。
私はcouldコードをコピーして貼り付けますが、それはあまりドライではないので、パーシャルに移動すると思いました。
2つのモデル間で共有されているため、--その部分をどこに配置しますか?
ありがとう!
Rails規約は、共有パーシャルを/app/views/shared
。
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
使用できます。
一般的に、ビューにsharedフォルダーがあり、よく使用されるパーシャルが含まれています。
どこに置いてもかまいません。 render
へのファイルのパスを指定することにより、任意の場所で任意の部分をレンダリングできます。それをレンダリングするコントローラーに関連付ける必要はありません。私はpartials
ディレクトリの下のview
と呼ばれるディレクトリを使用し、その中で次のようにパーシャルを呼び出します。
render :partial => 'partials/mypartial'