2013-03-29 42 views
5

我想爲我的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文件。頁面特定的CSS與Rails應用程序

我application.css:

/* 
*= require_tree 
*/ 
+1

請檢查此前一個問題,它是關於JavaScript的,但解決方案與CSS相同。 http://stackoverflow.com/questions/6167805/using-rails-3-1-where-do-you-put-your-page-specific-javascript-code – depa

+0

我最終使用這種解決方案。感謝您的答覆! – scientiffic

+0

如果需要,我在這裏回答了這個問題。 http://stackoverflow.com/questions/26243434/separate-css-folders-for-separate-rails-controllers/26246392#26246392 – user3591126

回答

5

這個問題似乎是針對你需要做什麼:Using Rails 3.1 assets pipeline to conditionally use certain css

簡而言之,你需要重新組織你的應用程序/資產/樣式表文件夾成一些子目錄和更改您的清單文件,以便所有在運行時捆綁在一起。

然後,您可以在視圖中添加一些條件邏輯,以便爲作業加載正確的CSS。 content_for標籤在這裏可能會很有用。您可以編輯app/views/layouts/application.html.erb,並在其他javascript之後包含一行javascript <%= yield:view_specific_css%>。您認爲這些文件,你可以使用

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

你應該讓他們既作爲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,上海社會科學院的一個子集,和說唱當前的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文件。通過一個解決方案,您可以輕鬆切換每個控制器的操作。

+0

感謝您的回覆。你能解釋一下這條線的含義嗎? body {:class => @old_layout? 「old_layout」:「new_layout」} 這是否意味着它檢查old_layout的值,並且如果它是true,則使主體類old_layout,如果它是false,則使new_layout爲正確類? – scientiffic

+1

是的,這是正確的。但是請記住,如果(at)old_layout也爲零,則它也會執行new_layout,所以當您處理使用新佈局的方法時,您不必在控制器操作中設置(在)old_layout。它也是標記哪些方法仍然需要升級的好方法,因爲它們中的每一個都將包含(at)old_layout = true。 – rovermicrover

相關問題