2012-07-30 42 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