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