Railsでは通常、layoutファイルでstylesheet_link_tag
メソッドを使ってSprocketsによってコンパイルされたCSS(元々app/assets/stylesheets/application.css
等に書いていたCSS)を参照します。
app/views/layouts/application.html.erb
<!DOCTYPE html>
<html>
<head>
<!-- 略 -->
<%= stylesheet_link_tag "application" %>
</head>
背景を説明すると長くなるので省略しますが、とある事情でこのコンパイルされたCSSを文字列として取得する必要が出てきました。(簡単にいうと、<link href="..." >
でcssファイルにリンクするのではなく、HTMLに直接スタイルシートのコードを埋め込む必要があった)
いろいろ調べた結果、以下のようなコードで取得できることがわかりました。
Sprockets::Railtie
.build_environment(Rails.application, true)['application.css']
.to_s
#=> "html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0} ..."
以下はその使用例です。
<!DOCTYPE html>
<html>
<head>
<style>
<%# SprocketsによってコンパイルされたCSSをHTMLに直接埋め込む %>
<%= Sprockets::Railtie.build_environment(Rails.application, true)['application.css'].to_s %>
</style>
</head>
こうしたテクニックを使う場面は滅多にないと思いますが、もし同じような状況に遭遇したら参考にしてみてください。