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?
J'utilise gem 'haml-Rails', '= 0.3.4'
dans mon gemfile. il génère automatiquement *.html.haml
sans configuration.
Dans la configuration de votre application, essayez de définir les paramètres suivants:
config.generators do |g|
g.template_engine :haml
end
si vous avez gem 'haml-Rails' dans votre Gemfile, il devrait créer des fichiers haml par défaut au lieu de erb.
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
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
...
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?