хамл по умолчанию - PullRequest
       35

хамл по умолчанию

44 голосов
/ 08 февраля 2012

Есть ли способ настроить рельсы для использования haml по умолчанию, т. Е. Когда создается скаффолд, вместо scaffold_name/index.html.erb создается соответствующий scaffold_name/index.html.haml.

Аналогично тому, как вы можете добавить config.sass.preferred_syntax = :sass к config/application.rb и сгенерировать scaffold_name.sass по умолчанию.

Попытка добавить следующее к config/application.rb

config.generators do |g| 
  g.template_engine :haml
end

но заканчиваются следующим

$ rails generate scaffold foo name:string
  invoke  active_record
  create    db/migrate/20120208152550_create_foos.rb
  create    app/models/foo.rb
  invoke    test_unit
  create      test/unit/foo_test.rb
  create      test/fixtures/foos.yml
   route  resources :foos
  invoke  scaffold_controller
  create    app/controllers/foos_controller.rb
   error    haml [not found]
  invoke    test_unit
  create      test/functional/foos_controller_test.rb
  invoke    helper
  create      app/helpers/foos_helper.rb
  invoke      test_unit
  create        test/unit/helpers/foos_helper_test.rb
  invoke  assets
  invoke    coffee
  create      app/assets/javascripts/foos.js.coffee
  invoke    sass
  create      app/assets/stylesheets/foos.css.sass
  invoke  sass
  identical    app/assets/stylesheets/scaffolds.css.sass
$ rails destroy scaffold foo                                                                                                                        
  invoke  active_record
  remove    db/migrate/20120208152550_create_foos.rb
  remove    app/models/foo.rb
  invoke    test_unit
  remove      test/unit/foo_test.rb
  remove      test/fixtures/foos.yml
   route  resources :foos
  invoke  scaffold_controller
  remove    app/controllers/foos_controller.rb
   error    haml [not found]
  invoke    test_unit
  remove      test/functional/foos_controller_test.rb
  invoke    helper
  remove      app/helpers/foos_helper.rb
  invoke      test_unit
  remove        test/unit/helpers/foos_helper_test.rb
  invoke  assets
  invoke    coffee
  remove      app/assets/javascripts/foos.js.coffee
  invoke    sass
  remove      app/assets/stylesheets/foos.css.sass
  invoke  sass

Я создал симпатичную маленькую команду bundle, чтобы заменить все erb на файлы haml после этой заставки, но я все еще заинтересован в том, чтобы она была по умолчанию при создании скаффолда! Как мне сделать так, чтобы по умолчанию генерировались файлы haml (не erb!)?

Ответы [ 6 ]

67 голосов
/ 09 февраля 2012

Я использую gem 'haml-rails', '= 0.3.4' в моем gemfile. он автоматически генерирует *.html.haml без какой-либо конфигурации.

13 голосов
/ 08 февраля 2012

В настройках приложения попробуйте установить следующее:

config.generators do |g|
  g.template_engine :haml
end
8 голосов
/ 09 октября 2012

если у вас есть gem 'haml-rails' в вашем Gemfile, он должен создавать файлы haml по умолчанию вместо erb.

6 голосов
/ 05 ноября 2014

Это довольно просто!

Все, что вам нужно сделать, это добавить следующее в ваш Gemfile:

gem 'haml'
gem 'haml-rails'

и затем запустить bundle install

1 голос
/ 13 апреля 2015

Обнаружено, что это полное решение

Скажите, если у вас есть проект Rails Engine с именем rails_address

Добавить конфигурацию haml в lib / rails_address / engine.rb

module RailsAddress
  class Engine < ::Rails::Engine
    isolate_namespace RailsAddress

    config.generators do |g| 
      g.template_engine :haml
    end
  end
end

Добавлены хамлы в rails_address.gemspec

...
  s.add_dependency "rails", "~> 4.1.10"
  s.add_dependency 'haml', '~> 4.0.6'
  s.add_dependency 'haml-rails', '~> 0.9.0'
...

Наконец, требуются гемы haml в lib / rails_address.rb

require "rails_address/engine"
require "haml"
require "haml-rails"

module RailsAddress
end

Выполните bundle install, только если вы еще не установили гемы haml.

Теперь, когда вы генерируете через скаффолд или контроллер, вы создаете хамл-представления.

ех.

$ rails g scaffold Address street:string city:string state:string zip_code:string
...
invoke    haml
exist      app/views/rails_address/addresses
create      app/views/rails_address/addresses/index.html.haml
create      app/views/rails_address/addresses/edit.html.haml
create      app/views/rails_address/addresses/show.html.haml
create      app/views/rails_address/addresses/new.html.haml
create      app/views/rails_address/addresses/_form.html.haml
...
0 голосов
/ 08 февраля 2012

Ошибка haml [not found] обычно возникает из-за неполной комплектации.Вы пытались запустить bundle update, а затем снова запустить генератор?

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