haml默认情况下

时间:2012-02-08 02:52:05

标签: ruby-on-rails haml ruby-on-rails-3.2

默认情况下是否有办法配置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!)是默认生成的?

6 个答案:

答案 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

的Rails引擎项目

将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然后重新运行生成器?