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