从Rails中的多个嵌套布局访问模型数据

时间:2013-10-13 03:53:55

标签: ruby-on-rails ruby ruby-on-rails-4

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

0 个答案:

没有答案