Rails hamlをデフォルトで使用するように構成する方法はありますか。つまり、スキャフォールドが生成されると、scaffold_name/index.html.haml
ではなくscaffold_name/index.html.erb
が生成されます。
config.sass.preferred_syntax = :sass
をconfig/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ではない)が生成されるようにするにはどうすればよいですか?
私はgemfileでgem 'haml-Rails', '= 0.3.4'
を使用しています。設定なしで自動的に*.html.haml
を生成します。
アプリケーション構成で、次の設定を試してください。
config.generators do |g|
g.template_engine :haml
end
gemfileにgem 'haml-Rails'がある場合、デフォルトではerbではなくhamlファイルが作成されます。
これはとても簡単です!
以下をGemfileに追加するだけです。
gem 'haml'
gem 'haml-Rails'
次にbundle install
を実行します
これが完全なソリューションであることがわかりました
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
...
haml [not found]
エラーは通常、バンドルが不完全であるためです。実行してみましたかbundle update
そしてジェネレータを再実行しますか?