2012-02-08 12 views
43

C'è un modo per configurare apparati per utilizzare Haml predefinita, cioè quando viene generato un ponteggio la seconda scaffold_name/index.html.haml viene generato invece di scaffold_name/index.html.erb.Haml predefinita

Simile a come è possibile aggiungere config.sass.preferred_syntax = :sass a config/application.rb e avere scaffold_name.sass generato per impostazione predefinita.

provato ad aggiungere quanto segue a config/application.rb

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

ma Ened con la seguente

$ 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 

ho creato un bel comando fagottino di sostituire tutte Erb con i file Haml seguente this screencast ma io' Sono ancora interessato a renderlo predefinito quando viene creato lo scaffold! Come faccio a fare in modo che i file haml (non erb!) Siano generati di default?

+0

Si tratta di Rails. Benvenuto a bordo. – Green

risposta

66

Io uso gem 'haml-rails', '= 0.3.4' nel mio Gemfile. genera automaticamente *.html.haml senza alcuna configurazione.

+9

Specificare un vincolo di versione in genere non è necessario per i nuovi progetti a meno che non si conoscano problemi con la versione più recente. – Kelvin

+1

Haml-rotaie versione 0.4 è l'ultima versione a supportare Rails 3. – johnnymire

+0

http://stackoverflow.com/questions/18485147/haml-rails-on-rails-4-0/37693041#37693041 –

11

nella configurazione dell'applicazione, provare a impostare la seguente:

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

Questo mi dà 'error haml [non trovato]', haml-rails è sicuramente nel file gem e penso che tu stia seguendo le linee giuste ma qual è il template_engine corretto per specificare haml o come posso aggiungere il supporto per questo? – rudolph9

+2

Prova ad aggiungere gioiello 'Haml' anche nella vostra Gemfile gemma 'Haml', '~> 3.1.4' Gem 'Haml-guide', '0.3.4' –

0

L'errore haml [not found] di solito è perché il fascio è incompleta. Hai provato a eseguire bundle update e poi rieseguire il generatore?

+0

No il problema persiste. Ho provato 'bundle update', il problema persiste ancora. Rimosso il 'Gemfile.lock' e chiamato' bundle install', il problema persiste. – rudolph9

8

se hai gem 'haml-rails' nel tuo Gemfile dovrebbe creare file haml di default invece di erb.

6

Questo è piuttosto semplice!

Tutto quello che dovete fare è aggiungere quanto segue al Gemfile:

gem 'haml' 
gem 'haml-rails' 

e quindi eseguire bundle install

1

trovato che questo è la soluzione completa

dire se si dispone di un Rails Progetto motore denominato rails_address

Aggiungere la configurazione haml a 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 

Aggiunto Haml deps a 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' 
... 

infine richiedere le gemme Haml in lib/rails_address.rb

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

module RailsAddress 
end 

Eseguire un bundle install solo in caso si non ho ancora installato le gemme haml.

Ora, quando si genera tramite scaffold o controller, si creano viste 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 
... 
+0

Grande, grazie, che risolti il mio problema. Però, penso che valga la pena ricordare che per me specificare 's.add_dependency 'haml'' nei file rails_address.gemspec e' g.template_engine: haml' nei file lib/rails_address/engine.rb sono stati sufficienti per far sì che generasse hami views . (usando i binari 5.1.4) – Misu