Rails CSS样式表互相覆盖

时间:2016-08-03 21:28:01

标签: ruby-on-rails

我在assets / stylesheets位置有一个clients.css和jobs.css。

每个都有一个相应的控制器。乔布斯是在客户之后用脚手架创建的。 scaffolds.scss文件是空白的。

application.css为空白

当我在jobs.css中对body{color:black}之类的更改进行编码时,它会更改clients / index.html.erb视图和jobs / index.html.erb视图。

这可能是什么原因?我想为工作和客户提供单独的.css文件..

1 个答案:

答案 0 :(得分:3)

来自documentation

  

Sprockets将所有JavaScript文件连接成一个主.js文件   并将所有CSS文件合并为一个主.css文件。

当然,这意味着当您对jobs.css进行更改时,您会看到同一个css应用于整个应用程序中的每个匹配元素。所有这些单独的.css文件都可以帮助您从人的角度保持组织,而不是从应用程序的角度来看。

您可能希望根据您的网页(例如#body_client#body_job)提出不同的ID和类来区分它们,但您可以看到这种命名约定如何变得难以处理应用程序增长。

拥有单独的资产是可能的,但并非没有痛苦。

application.js中,删除:

//= require_tree

application.css中,删除:

*= require_tree

application.html.erb中,添加以下内容:

<%= stylesheet_link_tag "application", params[:controller], :media => "all" %>
<%= javascript_include_tag "application", params[:controller] %>

config/initializers/assets.rb创建一个新的初始化程序文件,并添加以下代码:

%w( clients_controller jobs_controller ).each do |controller|
  Rails.application.config.assets.precompile += ["#{controller}.js.coffee", "#{controller}.css"]
end

这应该让您设置单独的每页资产。查看原始blog post了解详情。