如何在rails项目中分配不同的样式表?

时间:2011-12-11 16:11:14

标签: ruby-on-rails css

我在[{1}}中定义了一个样式表application.css

layouts/application.html.erb

但是,网站的某个部分会使用完全不同的样式表<%= stylesheet_link_tag "application" %> ,我在其dashboard.css中定义了该样式表:

index.html.erb

除非我删除应用程序布局文件中的stylesheet_link_tag,否则会出现使仪表板视图怪异的冲突。如果我将应用程序布局样式表标记移动到_header.html.erb部分,该部分使用非仪表板部分中的每个视图呈现,如下所示,则它不起作用。我怎么称呼他们?

<head>
    <title>My title</title>
    <%= stylesheet_link_tag "dashboard" %>
..

3 个答案:

答案 0 :(得分:5)

为您的信息中心创建单独的布局,并使用特定的样式表。

如果您想为其中一个控制器(及其所有操作)定制样式表,那么这很容易做到。创建一个匹配名称的布局,也就是说,对于users_controller,模板名称应为users.html.erb

您还可以为控制器指定任何布局。

class UsersController < ApplicationController
  layout 'some_layout'
end

如果您只想为某些操作设置自定义样式表,请在调用render时指定相应的布局。

def dashboard
  # some logic here
  render :layout => 'some_layout'
end

答案 1 :(得分:5)

你应该在head元素的application.html.erb中使用yield语句:

<head>
  <%= yield :head %>
</head>

然后在您的视图中,您将使用content_for标记:

<% content_for :head do %>
  <%= stylesheet_link_tag "dashboard" %>
<% end %>

还会在嵌套布局上阅读rails docs。它将教你如何使用这种范式获得幻想

答案 2 :(得分:0)

我建议您为仪表板定义第二个布局(app / views / layouts / dashboard.html.erb)。从该布局链接到仪表板样式表。然后从仪表板视图或控制器中使用该布局。

哦,只需使用一些if条件来链接同一布局中的不同样式表:

<%= stylesheet_link_tag(dashboard_views? ? "dashboard" : "application") %>

只需实施dashboard_views?帮助方法根据您的视图返回true或false。