Rails 3.1生成附加到ActiveRecord Model对象的样式表

时间:2012-05-11 10:02:04

标签: ruby-on-rails ruby-on-rails-3.1 paperclip asset-pipeline assets

我们以前在Rails 3.0中做过的事情就是将回形针附加到我们的'Site'模型,该模型代表了css样式表。我们的应用程序中有大量的站点,每个站点都有一个样式表,每次在站点中生成属性(如site.color1或site.color 2)都会生成。 然后我们有一个使用$ color1等变量的.sass文件,这些文件被解释为生成正确的css文件并用paperclip上传

这是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

问题是,当这些样式表被创建时,他们无法识别像image-path这样的sass帮助器。我无法为此找到解决方法。我们确实在模块中定义了自定义sass函数(模块Sass :: Script :: Functions)但是帮助程序也不能在那里工作,我无法弄清楚如何在include ActionView :: Helpers中使用image_path方法,虽然我已经尝试将该模块包含在我的sass功能模块中而没有运气。

有人对此有任何建议吗?

1 个答案:

答案 0 :(得分:0)

image-path助手与SASS无关。这是一种方法,provided我的Rails本身。尝试在模型类中包含以下模块:

include ActionView::Helpers::AssetTagHelper