2012-07-30 84 views
3

我有一个基于Rails 3.0的应用程序。这是一个预测应用程序,我需要在不同的点差上使用不同的CSS规则集,因为我使用具有不同规则的相同选择器。Rails资产管道与条件CSS文件

以前在rails 3.0中,我有一个很好的解决方案。

  1. 我在我的数据库中有一列有CSS文件的名称(没有扩展名)。

  2. 我拿起这个数据是这样的:

    @spread = Spread.find_by_id(params[:spread_id]) 
    @css_to_use = @spread.css_to_use 
    
  3. 将有条件线在我application.html.erb:

    <%= stylesheet_link_tag @css_to_use unless @css_to_use.blank? %> 
    

这个工作很好,直到如今。我正在为Rails 3.2开发这个应用程序,并且因为资产管道,这个魔法已经消失了。

我发现这个: Using Rails 3.1 assets pipeline to conditionally use certain css,但这是一个有点缓慢的解决方案(现在正是我想要的)。

有没有一个很好的解决这个问题?你知道一个解决方案,不仅能够加载指定的文件,而且还具有依赖性吗?

回答

3

我有相似需求的项目,我使用链接的答案所示的技术:

# app/views/layouts/application.html.haml 
= stylesheet_link_tag "application", "labels/#{Whitelabel[:label_id]}" 

# config/application.rb 
# Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added) 
config.assets.precompile += %w(active_admin.js active_admin.css labels/*) 

这包括一个额外的样式表,不包括在application.rb中

有看看完整的来源:https://github.com/phoet/on_ruby/

+0

据我所知,这个解决方案只处理一个CSS文件的分离。这无法处理动态处理的CSS加载。或者我错过了什么? – Kael 2012-07-31 14:42:09

+0

不,您可以将任意文件放入某些文件夹并根据数据库中的密钥加载它们。那是我以为你想要做的。也许你需要澄清你到底想要达到什么...... – phoet 2012-07-31 17:58:20

+1

你说得对。但链接标记的HAML视图和配置资源的active_admin部分驱使我误解。而且你忘记了一个重要的部分。我必须从application.css中删除这行:* = require_tree。我用它来使它在视图上工作:<%= stylesheet_link_tag“subsheets /#{@ css_to_use}”除非@ css_to_use.blank? %> 请为后面的读者使用application.css编辑您的文章。谢谢。 – Kael 2012-08-01 10:48:57