旭川の配線は、少しに無茶苦茶です。
今天為了修改部落格的一點 CSS 架構,所以又去參考了一下實戰聖經的 Asset Pipeline 章節。
Rails 產生 controller 檔案時,也會產生一個同名的
.coffee
和.scss
檔案,這沒有什麼實際的用途,它並不是說該 controller 的頁面才會執行該 js 和 css。建議可以砍掉這個檔案,自己安排 js 和 css 的檔案即可。
這段話也不能說錯。不過,事實上 rails 是可以讓只有某 controller 的頁面下,執行對應 JS 和 CSS 的。
指引看來不難,就針對 JS 使用 <%= javascript_include_tag params[:controller] %>
而 CSS 使用 <%= stylesheet_include_tag params[:controller] %>
這樣。
那就在 app/views/layouts/application.html.erb 加入 <%= javascript_include_tag params[:controller] %>
看看吧。
Sprockets::Rails::Helper::AssetNotPrecompiled in Home#index
Asset was not declared to be precompiled in production.
Add \`Rails.application.config.assets.precompile += %w( articles.js )\` to \`config/initializers/assets.rb\` and restart your server
很明顯,我們需要一點施工:
When using asset precompilation, you will need to ensure that your controller assets will be precompiled when loading them on a per page basis. By default .coffee and .scss files will not be precompiled on their own. See Precompiling Assets for more information on how precompiling works.
理由是 .coffee
和 .scss
檔案都不是 HTML 能讀取的 JS 和 CSS 檔案:.coffee
要透過 CoffeeScript 編譯成 JS 檔案、而 .scss
則要依賴 SASS 編譯成 CSS 檔案。
趕緊去 config/initializers/assets.rb
加上 Rails.application.config.assets.precompile += %w( articles.js )
後重新開機吧。
現在,你應該可以用 CoffeeScript 與 SASS 來寫程式了。
當然,如果你習慣其他預處理器如 LESS 或 TypeScript,rails 也有對應的 gem 完成你的願望。
參考資料
- Stack Overflow: How do I use Controller specific stylesheets in Rails 3.2.1?
- Railsguides: Controller Specific Assets
- Ruby on Rails 實戰聖經:Asset Pipeline