web-dev-qa-db-ja.com

デフォルトでhaml

Rails hamlをデフォルトで使用するように構成する方法はありますか。つまり、スキャフォールドが生成されると、scaffold_name/index.html.hamlではなくscaffold_name/index.html.erbが生成されます。

config.sass.preferred_syntax = :sassconfig/application.rbに追加し、scaffold_name.sassをデフォルトで生成する方法と同様です。

以下をconfig/application.rbに追加してみました

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

しかし、次のようになりました

$ 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

this スクリーンキャストに続いてすべてのerbをhamlファイルに置き換えるニースの小さなバンドルコマンドを作成しましたが、足場が作成されるときにそれをデフォルトにすることに興味があります!デフォルトでhamlファイル(erbではない)が生成されるようにするにはどうすればよいですか?

45
rudolph9

私はgemfileでgem 'haml-Rails', '= 0.3.4'を使用しています。設定なしで自動的に*.html.hamlを生成します。

68
raymondralibi

アプリケーション構成で、次の設定を試してください。

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

gemfileにgem 'haml-Rails'がある場合、デフォルトではerbではなくhamlファイルが作成されます。

8
munna_1

これはとても簡単です!

以下をGemfileに追加するだけです。

gem 'haml'
gem 'haml-Rails'

次にbundle installを実行します

6
karlingen

これが完全なソリューションであることがわかりました

Rails EngineプロジェクトRails_address

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

Rails_address.gemspecにhaml depsを追加しました

...
  s.add_dependency "Rails", "~> 4.1.10"
  s.add_dependency 'haml', '~> 4.0.6'
  s.add_dependency 'haml-Rails', '~> 0.9.0'
...

最後にlib/Rails_address.rbにhaml gemが必要です

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

module RailsAddress
end

bundle install haml gemをまだインストールしていない場合に備えて。

足場またはコントローラーを介して生成すると、hamlビューが作成されます。

例.

$ 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

haml [not found]エラーは通常、バンドルが不完全であるためです。実行してみましたかbundle updateそしてジェネレータを再実行しますか?

0
ekampp