将HAML添加到Rails资产管道

时间:2011-10-14 15:59:39

标签: ruby-on-rails-3 ruby-on-rails-3.1 haml asset-pipeline

我想提供已通过HAML预处理的客户端模板。我尝试使用haml_assets gem并将以下代码添加到初始化程序中:

Rails.application.assets.register_engine ".haml", Tilt::HamlTemplate

当我访问资产时,这两种方法都提供原始HAML而不是编译HAML。如何将HAML添加到管道中?

6 个答案:

答案 0 :(得分:12)

只是为了清理事情,因为我发现当前的答案有点令人恼火(尽管让我走向正确的方向)

如果我在初始化文件中有这一行,它可以工作:

# config/initializers/haml_assets.rb
Rails.application.assets.register_engine '.haml', Tilt::HamlTemplate

将haml文件放入assets文件夹,例如:

# app/assets/templates   

使用haml_asset gem!

答案 1 :(得分:10)

application.rb中的以下代码适用于Rails 3.2(预编译后的开发和生产中):

require 'haml'

config.assets.paths << Rails.root.join("app", "assets", "templates")

class HamlTemplate < Tilt::HamlTemplate
  def prepare
    @options = @options.merge :format => :html5
    super
  end
end

config.before_initialize do |app|
  require 'sprockets'
  Sprockets::Engines #force autoloading
  Sprockets.register_engine '.haml', HamlTemplate
end

这允许您将模板放在以后缀.html.haml命名的app / assets / templates中(您需要.html或者.htm文件在预编译过程中生成而不是.html)

答案 2 :(得分:5)

这对我有用:

# app/assets/javascripts/test.html.haml

%p hello

# config/initializers/haml_template.rb

Rails.application.assets.register_mime_type 'text/html', '.html'
Rails.application.assets.register_engine '.haml', Tilt::HamlTemplate

适用于http://127.0.0.1:3000/assets/test.html.haml

Rails.application.assetsSprockets::Environment

请参阅此处获取API参考:

答案 3 :(得分:0)

使用与我相同的方法:

%tr
  %th
    %a.action.link.show
  %td
  %td

以纯haml的形式返回。但

%tr
  %th
    %a.action.link.show
  %td cell 2
  %td cell 3

被用作html块。所以我认为这是haml gem的东西。您可以使用以下内容强制进行haml转换:

%tr
  %th
    %a.action.link.show
  %td &nbsp
  %td &nbsp

希望它有所帮助...

答案 4 :(得分:0)

在我们有完整的解决方案之前,必须先将以前的两个答案合并。

以下行适用于开发:

# config/initializers/haml_assets.rb
Rails.application.assets.register_engine '.haml', Tilt::HamlTemplate

然后在任何预编译上失败。

要使资产服务的haml在预编译之后工作,我们还需要在application.rb中使用这些行:

require 'haml'

config.assets.paths << Rails.root.join("app", "assets", "templates")

class HamlTemplate < Tilt::HamlTemplate
  def prepare
    @options = @options.merge :format => :html5
    super
  end
end

config.before_initialize do |app|
  require 'sprockets'
  Sprockets::Engines #force autoloading
  Sprockets.register_engine '.haml', HamlTemplate
end

答案 5 :(得分:0)

带有链轮3和4

# in /config/initializers/haml.rb
Rails.application.config.assets.configure do |env|
 env.register_mime_type "text/haml", extensions: %w(.haml .html.haml)
 env.register_transformer 'text/haml', Tilt::HamlTemplate.default_mime_type, Tilt::HamlTemplate
end