0

我有很多不同的网页,但大多数都属于 6 或 7 个页面类别中的 1 个。对于这些类别的网页中的每一个,我的外观和感觉都略有不同,例如不同的背景颜色/图像。我有以下内容views/layout/application.html.erb

<header class="sub<% if content_for?(:page_type) %> <%= yield(:page_type) %><% end %>">

在每一个视图中,我都有:

<% content_for :page_type, 'information' %>

但是对每个网页都这样做真的很痛苦,当我想改变周围的东西时,我总是不得不搞乱这些(我有很多页面)。所以,相反,我想只使用一个变量:

<header class="sub<%= @page_type ? ' ' + @page_type : '' %>">

和意见:

<% @page_type = 'information' %>

优点是我可以before_filter :set_page_type在控制器中做一个并为它控制的所有视图设置一次页面类型(一个很大的帮助)。

也许对我来说最好的办法就是使用 URL 的第一个文件夹作为网页的类别。我将不得不重组 URL,但无论如何这样做可能是有意义的。我确实有一些必须保留的顶级页面。

这必须是一个相当普遍的情况,对大多数页面进行分类并在布局中使用该分类的最佳方法是什么?

4

1 回答 1

1

我通常为 body 类使用一个助手——像这样:

def body_class(c = nil)
  @body_class ||= [controller.controller_name]
  @body_class << c
  @body_class.flatten.compact.uniq.join(" ")
end

默认情况下,这将包括控制器名称(您还可以包括操作等。然后我根据需要在视图中调用此助手,例如

<% body_class "bar" %>

由于助手总是返回一个类字符串,然后您可以在布局中调用相同的助手(我使用body标签),可能不带参数:

<body class="<%= body_class %>">

这将在前面的示例中呈现一个名为FoosController以下内​​容的控制器:

<body class="foos bar">

如果您在例如应用程序控制器中定义帮助器并使其可用于使用视图的视图helper_method,那么这应该可以满足您的需求。

于 2012-11-06T21:14:19.470 回答