44 votes

haml par défaut

Existe-t-il un moyen de configurer rails pour qu'il utilise haml par défaut, c'est-à-dire que lorsqu'un échafaudage est généré, la fonction scaffold_name/index.html.haml est généré au lieu de scaffold_name/index.html.erb .

De la même façon qu'il est possible d'ajouter config.sass.preferred_syntax = :sass a config/application.rb et ont scaffold_name.sass généré par défaut.

J'ai essayé d'ajouter les éléments suivants à config/application.rb

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

mais j'ai terminé par 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 petite commande bundle pour remplacer tous les fichiers erb par haml comme suit este screencast mais je suis toujours intéressé de le rendre par défaut lorsque l'échafaudage est créé ! Comment faire pour que les fichiers haml (pas erb !) soient générés par défaut ?

67voto

raymondralibi Points 1416

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

13voto

Nick Veys Points 8638

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

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

8voto

tram Points 61

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

7voto

karlingen Points 975

C'est assez simple !

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

gem 'haml'
gem 'haml-rails'

et ensuite exécuter bundle install

1voto

cevaris Points 1145

Voici la solution complète

Disons que vous avez un projet Rails Engine 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é les deps haml à 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, exigez les gemmes haml dans lib/rails_address.rb

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

module RailsAddress
end

Exécuter un bundle install juste au cas où vous n'auriez pas encore installé les gemmes haml.

Maintenant, lorsque vous générez via un scaffold ou un contrôleur, vous allez créer 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
...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X