Rails 3.0 で行っていたことは、css スタイルシートを表す「Site」モデルにファイルをクリップで添付することでした。私たちのアプリケーションには、site.color1 や site.color 2 などのサイト内の属性が変更されるたびに生成されるスタイルシートを持つ多数のサイトがあります。次に、$color1 などの変数を使用する .sass ファイルがあり、これらが解釈されて正しい css ファイルが生成され、ペーパークリップでアップロードされます
Site.rb (モデル) の関連部分は次のとおりです。
has_attached_file :stylesheet, PAPERCLIP_OPTIONS
def generate_site_specific_stylesheet(force = false)
if use_custom_stylesheet && (force || color_changed?)
stylesheets_path = Rails.root + 'app/assets/stylesheets'
template = File.read(stylesheets_path + '_site_specific_stylesheet.sass')
sass_engine = Sass::Engine.new(template, :load_paths =>[stylesheets_path.to_s, '.'],
:template_location => stylesheets_path.to_s, :custom => {:site => self})
stylesheet_contents = sass_engine.render
puts stylesheet_contents
self.stylesheet = StringIO.new stylesheet_contents
self.stylesheet.instance_write(:file_name, 'site_stylesheet.css')
self.stylesheet.instance_write(:content_type, 'text/css')
end
true
end
問題は、これらのスタイルシートが作成されるときに、イメージパスのような sass ヘルパーを認識しないことです。これに対する回避策を見つけることができませんでした。モジュール (モジュール Sass::Script::Functions) で定義されたカスタム sass 関数がありますが、ヘルパーはそこでも機能せず、include ActionView::Helpers で image_path メソッドを使用する方法がわかりません。そのモジュールを自分の sass functions モジュールに含めようとしましたが、うまくいきませんでした。
これについて何か提案はありますか?