2012-02-08 7 views
43

Czy istnieje sposób, aby skonfigurować szyny, aby domyślnie używać haml, tj. Gdy generowane jest rusztowanie, generowane jest scaffold_name/index.html.haml zamiast scaffold_name/index.html.erb.domyślnie haml

Podobny do tego, w jaki sposób można dodać config.sass.preferred_syntax = :sass do config/application.rb i domyślnie wygenerować scaffold_name.sass.

Próbowałem dodanie następujących do config/application.rb

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

ale ened się z poniższym

$ 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 

I stworzył piękny polecenie trochę wiązki zastąpić wszystkie erb z plikami haml następujące this screencast ale jestem m nadal jest zainteresowany ustawieniem domyślnym, kiedy powstanie rusztowanie! Jak zrobić to, aby pliki haml (nie erb!) Były generowane domyślnie?

+0

To jest szyny. Witamy na pokładzie. – Green

Odpowiedz

66

Używam gem 'haml-rails', '= 0.3.4' w moim gemfile. automatycznie generuje *.html.haml bez żadnej konfiguracji.

+9

Określenie ograniczenia wersji zwykle nie jest wymagane w przypadku nowych projektów, chyba że znane są problemy z najnowszą wersją. – Kelvin

+1

Haml-rails w wersji 0.4 to ostatnia wersja obsługująca Railsy 3. – johnnymire

+0

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

11

W swojej konfiguracji aplikacji, spróbuj ustawić następujące:

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

To daje mi 'błąd haml [nie znaleziony]', haml-rails jest zdecydowanie w pliku gem i myślę, że jesteś po prawej stronie, ale co jest właściwym template_engine aby określić haml lub jak mogę dodać obsługę tego? – rudolph9

+2

Spróbuj dodać klej 'haml' również do Gemfile gem 'haml', '~> 3.1.4' gem 'haml-rails', '0.3.4' –

0

Błąd haml [not found] to zwykle dlatego, że pakiet jest niekompletny. Czy próbowałeś już uruchomić bundle update, a następnie ponownie uruchomić generator?

+0

Nie problem nadal występuje. Wypróbowana "aktualizacja pakietu", problem nadal występuje. Usunięto 'Gemfile.lock' i wywołano' bundle install', problem nadal występuje. – rudolph9

8

jeśli masz gem 'haml-rails' w twoim Gemfile powinieneś domyślnie utworzyć pliki haml zamiast erb.

6

To całkiem proste!

Wszystko, co musisz zrobić, to dodać następujące swojej Gemfile:

gem 'haml' 
gem 'haml-rails' 

a następnie uruchomić bundle install

1

Okazało się, że kompletne rozwiązanie

Say jeśli masz Rails Projekt silnika o nazwie rails_address

Dodaj konfigurację Haml do 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 

Dodany haml deps do 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' 
... 

Wreszcie wymagają klejnotów haml w lib/rails_address.rb

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

module RailsAddress 
end 

Wykonuje bundle install tylko okrywać nie zainstalowałem jeszcze klejnotów Haml.

Teraz, gdy wygenerujesz za pomocą rusztowania lub kontrolera, utworzymy widoki haml.

np.

$ 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

Świetnie, dzięki, że rozwiązany mój problem. Chociaż, myślę, że warto wspomnieć, że dla mnie określenie 's.add_dependency 'haml'' w rails_address.gemspec i' g.template_engine: haml' w plikach lib/rails_address/engine.rb wystarczało, aby wygenerować haml views . (za pomocą szyn 5.1.4) – Misu