なんかスタイルシートのある色をデータベースに保存しておいて、管理者が自由に色を変えられるようにしたいよね、みたいな話があったので
Railsだと「アセットパイプライン」なるものでやれるそうです。
今までお手伝いしてきたアプリでは、何の気無しにJavaScriptをCoffeeScriptで、CSSをSCSSで書いてきたのですが、どうやらこれもアセットパイプラインを暗に使っていたようです。
今回はSCSSの一部をデータベースに保存してある値に書き換えたいのですが、ではどうしたものか…調べてみたところ、答えはこうでした。
ファイル名をstyle.css.scssからstyle.css.scss.erbに変える
これだけです。こうするとRailsさんはまず件のファイルをERBとしてパースしてからSCSSとしてパースします。ファイルの方は、
$color: <%= Style.first.try(:color) || Style::DEFAULT_COLOR %>; header { h1, h2, h3, h4, h5, h6 { color: $color; } }
みたいな感じで書いておけばOKです。
ちなみにアセットパイプラインのねらいはこれだけでなく、「スタイルシートやスクリプトをまとめて圧縮し、リクエスト回数を減らす」というのもあります。どっちかというとこちらがメインらしい気がしないでもありません