Rails Guidesで説明されているように、Rails にネストされたレイアウトがあるとします。ここで、私の application.html.erb ファイルには次のものがあります。
...
<%= content_for?(:content) ? yield(:content) : yield %>
...
その中のどこかに。
アプリケーション レイアウトとサブレイアウトの両方で、モデルからデータにアクセスする必要があります。
この質問から解決策を見つけました。次のようなものを my に入れることができますApplicationController
:
class ApplicationController < ActionController::Base
before_filter :get_main_layout_stuff, :get_sub_layout_stuff
private
def get_main_layout_stuff
@cart = find_cart
end
def get_sub_layout_stuff
@categories = find_categories
end
end
サブレイアウトを使用していないコントローラーでは、次のように言えます。
skip_before_filter :get_sub_layout_stuff
これはうまくいきます。しかし、より多くのレイアウト (たとえば、多数のネスト層) があり、レイアウトが URL のコンテンツに基づいて特定の情報を必要とする場合、それは扱いにくくなります。すべてのコントローラーに100 万個の s をリストするか、各コントローラーskip_before_filter
に として追加する関数のセットを正確に覚えておく必要がありますbefore_filter
。各コントローラーでどのレイアウトが必要かを既に指定している場合、どちらのソリューションも非常にDRYではありません。
だから私の質問は、レイアウトの階層内の各レイアウトに適切な情報を取得するにはどうすればよいbefore_filter
ですか? 要求されたレイアウトに基づいて必要なデータを自動的にロードし、再帰的に戻って各親レイアウトに必要なデータをロードする方法はありますか? または、レイアウトが必要なときに呼び出される各レイアウトの「コントローラー」を持つ方法はありますか? それとも、この問題について完全に間違った方法で考えていますか?