2012-07-18 52 views
6

在資產管道的話題,Rails的指南建議,Rails可以鏈接到控制器的CSS文件只需調用:Rails3中資產管道:控制特定樣式

stylesheet_link_tag params[:controller] 

從Rails的指南摘錄:

例如,如果您生成一個ProjectsController,Rails的也將在應用程序/資產/樣式表/ projects.css.scss在添加應用程序/資產/ JavaScript的/ projects.js.coffee和一個新的文件中的另一個。你應該把任何JavaScript或CSS獨特到它們各自的資源文件內的控制器,因爲這些文件可以然後只爲這些控制器與系如<%= javascript_include_tag PARAMS加載[:控制器]%>或<%= stylesheet_link_tag PARAMS [ :控制器]%>。 http://guides.rubyonrails.org/asset_pipeline.html#how-to-use-the-asset-pipeline

那在發展,我們讓Rails的依傍資產管道工程只是罰款。但是,在生產中,我收到一個錯誤,說樣式表沒有預編譯。

從我讀過,你必須添加要表現爲獨立的文件,預編譯陣列像這樣的任何資產:

config.assets.precompile += ['admin.js', 'admin.css', 'swfObject.js'] 

如果我要被鏈接作爲控制器的具體樣式表根據上面的Rails指南示例,是否必須枚舉預編譯數組中的每一個?

回答

6

簡短的回答是...是的。

但是,請記住,資產管道也可以用來搭配選擇。我爲一個簡單的cms實現了類似的設置,我知道我希望每個控制器都有它自己的.css和.js。該配置看起來像...

config.assets.precompile += ["*.css", "*.js") 

如果您有不與控制器直接相關的樣式表或腳本的分配不是最佳解決方案。在我的情況下,每個控制器都需要非常不同的.js文件。

另外,如果你的資產不同,可以分爲兩個或三個相互關聯的羣體,則可以考慮創建多個清單,然後明確列出。

編輯 我想爲任何試圖決定如何設置資產預編譯的人提出這個答案。

隨着預編譯明確每個資產或清單,你也可以把你想成precomiled文件夾中的Assets文件夾中的所有文件,並使用相同的通配符匹配只有編譯這些資產。

例如

config.assets.precompile += ['*.css', 'manifests/*.js'] 

將編譯所有的CSS表,只有.js文件的清單文件夾中。

同樣可以傳遞assets.precomile一個正則表達式。因此,如果您想將「pre_」附加到您希望預先編制的任何文件中,您可以使用類似...

config.assets.precompile += [/^pre_\w*.(css|js)/i] 

可能性是無窮無盡的,只是不覺得你不得不接受預編譯的所有資產,一個可能沒用EN吞噬,因爲大多數的腳本和CSS應該寫在多個實例,並與其他一起使用腳本或將所有內容,甚至高度專業化的腳本投入應用程序。*。