特定于页面的CSS与Rails应用程序

我想为我的Rails应用程序测试两个不同的接口。 理想情况下,我想要两个单独的css文件,一个与每个接口相关联(例如,new_interface.css和old_interface.css)。 我目前有两个不同的接口部分,一个叫_new_interface.html.erb,一个叫_old_interface.html.erb。 如果我想在加载特定视图时调用正确的css文件,我该怎么做? 例如,如果我加载_new_interface.html.erb,我希望它加载new_interface.css文件并忽略old_interface.css文件。

我的application.css:

/* *= require_tree */ 

这个问题似乎针对您需要做的事情: 使用Rails 3.1资产管道来有条件地使用某些css

简而言之,您需要将app / assets / stylesheet文件夹重新组织到一些子目录中并更改清单文件,以便在运行时不会将所有内容捆绑在一起。

然后,您可以在视图中放置一些条件逻辑,以便为作业加载正确的css。 content_for标签可能在这里很有用。 您可以编辑app / views / layouts / application.html.erb并在其他javascript <%= yield:view_specific_css%>之后添加一行。 然后在您的视图文件中,您可以使用

 <% content_for :view_specific_css do %> <%= stylesheet_link_tag "whatever %> <% end %> 

您应该将它们作为application.css的一部分保留,并执行以下操作

application.html.haml / ERB

 body{:class => @old_layout ? "old_layout" : "new_layout"} 

然后当你处于一个与你的控制器中的旧布局不同的动作时

 @old_layout = true 

然后在你的css文件中使用body.old_layout或body.new_layout预先添加所有内容或者使用scss,sass的子集,然后说出你当前的css文件,就像这样

 body.old_layout{ #all your old layout css goes here, all but body statements of course } body.new_layout{ #all your new layout css goes here, all but body statements of course } 

这样你就可以用一个css文件保持简单。 通过一个解决方案,您可以轻松地一次切换一个控制器操作。