如何在子文件夹中使用不同的部分和布局?

时间:2012-08-08 13:32:31

标签: ruby-on-rails ruby layout partials

我需要对views/admin文件夹中的任何内容使用单个部分。我的设置:

/app/views/
        + admin
            + accounts
            + users
        + layouts
            - application.html.slim
        + application
            - _header.html.slim
        + users
        + accounts

我在_header.html.slim中有一个名为/views/application/的部分内容。部分来自/views/layouts/application.html.slim

我想为_header.html.slim目录下的任何内容呈现不同的/views/admin部分。我可以创建一个新的_header.html.slim并将其添加到/views/admin/accounts/views/admin/users,但我不想重复我的自我。我希望admin下的所有内容都有一个部分内容。

我怎么能这样呢?我尝试添加/views/admin/application/views/admin/layouts文件夹,希望它们会覆盖/view目录中的文件夹,但没有运气。

2 个答案:

答案 0 :(得分:2)

布局/ application.html.slim:

- if controller.controller_name == "admin"
    == render :partial => "admin/header"
- else
    == render :partial => "application/header"

答案 1 :(得分:0)

文件夹本身的结构无法控制运行或应用哪些文件夹 - 文件夹结构实际上只是为了帮助您以有意义的方式组织它。

根据您的需要,您可以通过多种方式完成您所需的工作:

一种方法是使用render :layout => 'some_layout_name'选项as outlined here指定控制器中的布局(包括所需的部分)(跳到标题“2.2.11.2:布局选项”)细节)。

另一种方法是在您的操作中设置一个变量,其中包含您要渲染的布局或部分的名称,并在您的视图中执行以下操作:

<% if @custom_partial == "slim" %>
  <%= render :partial => 'header.html.slim' %>
<% end %>

因此,要么指定自定义布局(如果您希望整个布局包括部分是自定义的),要么设置一个标志变量来控制哪个部分在哪个时间呈现,并使用该变量来控制渲染流程你的看法。哪种选择适合您,取决于哪种选择更清洁,最可靠,对您的项目有意义;也就是说,由你决定。

相关问题