Добавление HAML в конвейер ресурсов Rails - PullRequest
13 голосов
/ 14 октября 2011

Я хотел бы обслуживать шаблоны на стороне клиента, которые были предварительно обработаны с помощью HAML.Я попытался использовать haml_assets gem и добавить следующий код в инициализатор:

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

Оба этих метода обслуживают необработанный HAML и не скомпилированный HAML при доступе к ресурсу.Как я могу добавить HAML в конвейер?

Ответы [ 5 ]

12 голосов
/ 12 сентября 2012

Просто, чтобы прояснить ситуацию, поскольку я нахожу текущие ответы немного раздражающими (хотя и привело меня в правильном направлении)

Это работает, если у меня есть эта строка в файле инициализатора:

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

Бросьте ваши файлы haml в папку активов, например:

# app/assets/templates   

Не не используйте гем haml_asset!

10 голосов
/ 10 июня 2013

Следующий код в 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

Это позволяет вам размещать шаблоны в app / assets /шаблоны, названные с суффиксом .html.haml (вам нужен .html, иначе файлы .htm генерируются вместо .html в процессе предварительной компиляции).

5 голосов
/ 14 марта 2012

Это работает для меня:

# 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.assets Sprockets::Environment.

См. Здесь для справки API:

0 голосов
/ 17 сентября 2013

Два из предыдущих ответов здесь должны были быть объединены, прежде чем у нас было полное решение.

Следующая линия работает в разработке:

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

Но тогда происходит сбой при любой прекомпиляции.

Чтобы хамл, обслуживаемый активами, работал после прекомпиляции, нам также понадобились следующие строки в 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
0 голосов
/ 01 февраля 2012

Используя тот же подход, который у меня есть:

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

возвращается как чистый хамл. Но

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

был использован как кусок html. Так что я думаю, что это что-то с гемом хамла. Вы можете принудительно преобразовать хамл с помощью чего-то вроде этого:

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

Надеюсь, это поможет ...

...