默认情况下是否有办法配置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!)是默认生成的?
答案 0 :(得分:67)
我在我的gemfile中使用gem 'haml-rails', '= 0.3.4'
。它会在没有任何配置的情况下自动生成*.html.haml
。
答案 1 :(得分:13)
在您的应用程序配置中,尝试设置以下内容:
config.generators do |g|
g.template_engine :haml
end
答案 2 :(得分:8)
如果你的Gemfile中有 gem'haml-rails',它应默认创建haml文件而不是erb。
答案 3 :(得分:6)
这很简单!
您需要做的就是将以下内容添加到您的Gemfile中:
gem 'haml'
gem 'haml-rails'
然后运行bundle install
答案 4 :(得分:1)
发现这是完整的解决方案
假设您有一个名为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宝石require "rails_address/engine"
require "haml"
require "haml-rails"
module RailsAddress
end
执行bundle install
只是因为你尚未安装haml宝石。
现在,当您通过脚手架或控制器生成时,您将创建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
...
答案 5 :(得分:0)
haml [not found]
错误通常是因为捆绑包不完整。您是否尝试过运行bundle update
然后重新运行生成器?