1

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 モジュールに含めようとしましたが、うまくいきませんでした。

これについて何か提案はありますか?

4

1 に答える 1

0

image-pathhelper は SASS と提携していません。Rails自体を提供するのはメソッドです。モデル クラスに次のモジュールを含めてみてください。

include ActionView::Helpers::AssetTagHelper
于 2012-05-11T11:53:25.560 に答える