web-dev-qa-db-fra.com

haml par défaut

Existe-t-il un moyen de configurer Rails pour utiliser haml par défaut, c'est-à-dire lorsqu'un échafaudage est généré, l'attribut scaffold_name/index.html.haml correspondant est généré à la place de scaffold_name/index.html.erb

Semblable à la façon dont vous pouvez ajouter config.sass.preferred_syntax = :sass à config/application.rb et avoir scaffold_name.sass généré par défaut.

J'ai essayé d'ajouter ce qui suit à config/application.rb

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

mais mis en place avec ce qui suit

$ 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

J'ai créé une commande Nice little bundle pour remplacer tous les fichiers erb par des fichiers haml après this screencast, mais je suis toujours intéressé par le rendre par défaut lors de la création de l'échafaudage! Comment puis-je faire en sorte que les fichiers haml (pas erb!) Soient générés par défaut?

44
rudolph9

J'utilise gem 'haml-Rails', '= 0.3.4' dans mon gemfile. il génère automatiquement *.html.haml sans configuration.

67
raymondralibi

Dans la configuration de votre application, essayez de définir les paramètres suivants:

config.generators do |g|
  g.template_engine :haml
end
13
Nick Veys

si vous avez gem 'haml-Rails' dans votre Gemfile, il devrait créer des fichiers haml par défaut au lieu de erb.

8
munna_1

C'est assez simple!

Tout ce que vous avez à faire est d’ajouter ce qui suit à votre Gemfile:

gem 'haml'
gem 'haml-Rails'

puis exécutez bundle install

6
karlingen

J'ai trouvé que c'était la solution complète 

Dites si vous avez un projet de moteur Rails nommé Rails_address

Ajoutez la configuration 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

Ajout de haml deps à 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'
...

Enfin besoin des gemmes haml dans lib/Rails_address.rb

require "Rails_address/engine"
require "haml"
require "haml-Rails"

module RailsAddress
end

Exécutez un bundle install juste au cas où vous n'avez pas encore installé les gems haml.

Désormais, lorsque vous générez via un échafaudage ou un contrôleur, vous créez des vues haml.

ex.

$ 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
...
1
cevaris

L'erreur haml [not found] est généralement due au fait que l'ensemble est incomplet. Avez-vous essayé d'exécuter bundle update, puis de réexécuter le générateur?

0
Emil Kampp