假设我在Rails中有一个嵌套布局,如Rails Guides中所述,我的application.html.erb文件包含:
...
<%= content_for?(:content) ? yield(:content) : yield %>
...
在其中的某个地方。
在应用程序布局和子布局中,我都需要从模型中访问数据。
我找到了this question的解决方案。我可以在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内容的特定信息,那么它就变得难以处理。我必须在每个控制器中列出一百万个skip_before_filter
,或者我必须记住在每个控制器中确切添加哪个函数集before_filter
。当我已经在每个控制器中指定了我想要的布局时,两种解决方案都不是很干。
所以我的问题是:如何在没有疯狂数量的before_filter
s的情况下,为布局层次结构中的每个布局获取正确的信息?有没有办法根据请求的布局自动加载所需的数据,然后递归返回加载每个父布局所需的数据?或者有没有办法为每个布局都有一个“控制器”,只要需要布局就会调用它?或者我是以完全错误的方式思考这个问题?