Rails3.1 - 如何在某些视图中包含css文件而不包含其他视图?

时间:2011-10-05 01:52:04

标签: ruby-on-rails-3 compass-sass

似乎在rails 3.1中,所有css.scss文件都合并为1个文件。如果我想将css文件仅包含在某些视图中,该怎么办?就像我想要管理页面中包含admin.css.scss和home / about / contact页面中的main.css.scss一样。

3 个答案:

答案 0 :(得分:13)

在Rails 3.1中,如果你的application.css看起来像所有你的样式表将被合并到application.css中:

/*
 * This is a manifest file that'll automatically include all the stylesheets available in this directory
 * and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
 * the top of the compiled file, but it's generally better to create a new file per style scope.
 *= require_self
 *= require_tree . 
*/

这是由于* = require_tree。

您可以要求使用特定的样式表:

*= require main

否则,在你的布局中,你写:

%head
 = yield :head

并在您的信息页中:

= content_for :head do
 = stylesheet_link_tag 'stylesheet'

答案 1 :(得分:10)

让我添加一个对我有用的解决方案。

如前一个回答中所述,您可能希望删除

 *= require_tree . 
来自 application.css 文件的

声明。

我保留了

 *= require_self

整个应用程序中共享样式的声明。

然后在我的 application.html 文件中,我使用以下语句仅包含 application.css controller.controller_name.css 视图中的样式表。

= stylesheet_link_tag "application", controller.controller_name
= javascript_include_tag "application", controller.controller_name

正如您可以看到JavaScript文件的相同作品。

答案 2 :(得分:3)

另见:
http://guides.rubyonrails.org/layouts_and_rendering.html

(参见第2.2.14节“寻找布局”)

您可以为不同的控制器设置不同的布局!

e.g。在app / views / layouts下你可以有application.haml和admin.haml 在app / controllers下你有一个admin_controller.rb

Rails将尝试查找与控制器同名的布局。

您还可以覆盖此行为并指定要使用的布局,例如:

class ItemsController < ApplicationController
  layout "admin"
  #...
end

然后,您将在app / stylesheets下为此新布局创建一个admin.scss文件!