Css 是否可以只编译/服务资产的一个子集?怎么用?

Css 是否可以只编译/服务资产的一个子集?怎么用?,css,ruby-on-rails,ruby-on-rails-3,asset-pipeline,Css,Ruby On Rails,Ruby On Rails 3,Asset Pipeline,对于某个控制器/操作,我只想提供CSS资产的特定子集。这可能吗 我希望在app/views/layouts/application.html.erb中有类似的内容 <% if newsletter_show? %> <%= stylesheet_link_tag "foo", "bar", "baz" %> <% else %> <%= stylesheet_link_tag "application" %> &

对于某个控制器/操作,我只想提供CSS资产的特定子集。这可能吗

我希望在app/views/layouts/application.html.erb中有类似的内容

<% if newsletter_show? %>
    <%= stylesheet_link_tag    "foo", "bar", "baz" %>
<% else %>
    <%= stylesheet_link_tag    "application" %>
    <%= javascript_include_tag "application" %>
<% end %>

注意:当条件为true时,我不仅提供特定的css文件(foo、bar和baz),还特意不提供javascript


这在开发中非常有效,但在生产中却失败了,因为显然我们不能有不相交的样式表,因为它们是作为一个整体预编译的。有没有办法解决这个问题?

选项1: 如果将foo-bar和baz添加到预编译中,它应该可以工作:

在config/application.rb中:

config.assets.precompile += %w(foo.css bar.css baz.css)
config.assets.precompile += %w(newsletter.css)
选项2: 您还可以创建另一个css分组文件:

在app/assets/stylesheets/newsletter.css中:

/*
*= require foo
*= require bar
*= require baz
*/
在config/application.rb中:

config.assets.precompile += %w(foo.css bar.css baz.css)
config.assets.precompile += %w(newsletter.css)
他认为:

<% if newsletter_show? %>    
  <%= stylesheet_link_tag 'newsletter' %>
#...

#...

别忘了重新编译资产:)

谢谢!我使用了选项2。