0

假设我在 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_filters 的情况下为布局层次结构中的每个布局获取正确的信息?有没有办法根据请求的布局自动加载所需的数据,然后递归地返回为每个父布局加载所需的数据?或者,也许有一种方法可以让每个布局都有一个“控制器”,每当需要布局时都会调用它?还是我以完全错误的方式思考这个问题?

4

0 回答 0