我需要对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
目录中的文件夹,但没有运气。
答案 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 %>
因此,要么指定自定义布局(如果您希望整个布局包括部分是自定义的),要么设置一个标志变量来控制哪个部分在哪个时间呈现,并使用该变量来控制渲染流程你的看法。哪种选择适合您,取决于哪种选择更清洁,最可靠,对您的项目有意义;也就是说,由你决定。