2

我需要对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/accountsand /views/admin/users,但我不想重复我自己。我想要一个部分用于admin.

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

4

2 回答 2

2

布局/application.html.slim:

- if controller.controller_name == "admin"
    == render :partial => "admin/header"
- else
    == render :partial => "application/header"
于 2012-08-08T13:43:12.387 回答
0

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

根据您的需要,您可以通过多种方式完成您正在寻找的内容:

一种方法是使用此处概述render :layout => 'some_layout_name'的选项在控制器中指定布局(包括所需的部分)(具体请跳至标题“2.2.11.2 The :layout Option”)。

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

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

因此,要么指定一个自定义布局(如果您希望包括部分的整个布局是自定义的),或者设置一个标志变量来控制哪些部分在什么时候被渲染,并使用该变量来控制视图中的渲染流程。这些选项中的哪一个适合您,实际上取决于哪个更清洁、最可靠并且对您的项目有意义;也就是说,由您决定。

于 2012-08-08T13:42:42.720 回答