47

有没有办法将rails配置为默认使用haml,即当生成脚手架时,生成的是根据scaffold_name/index.html.haml而不是scaffold_name/index.html.erb.

类似于您如何能够添加并config.sass.preferred_syntax = :sass默认生成。config/application.rbscaffold_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

在这个截屏视频之后,我创建了一个不错的小捆绑命令,用 haml 文件替换所有 erb,但我仍然有兴趣在创建脚手架时将其设为默认值!我如何使它默认生成haml文件(不是erb!)?

4

6 回答 6

69

gem 'haml-rails', '= 0.3.4'在我的 gemfile 中使用。*.html.haml它无需任何配置即可自动生成。

于 2012-02-09T03:19:09.050 回答
16

在您的应用程序配置中,尝试设置以下内容:

config.generators do |g|
  g.template_engine :haml
end
于 2012-02-08T02:59:00.213 回答
8

如果你的 Gemfile 中有gem 'haml-rails',它应该默认创建 haml 文件而不是 erb。

于 2012-10-09T19:47:04.477 回答
7

这很简单!

您需要做的就是将以下内容添加到您的 Gemfile 中:

gem 'haml'
gem 'haml-rails'

然后运行bundle install

于 2014-11-05T14:56:00.440 回答
1

发现这是完整的解决方案

假设您有一个名为的 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 部门

...
  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 gems

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

module RailsAddress
end

执行一个bundle install以防万一您还没有安装haml gems。

现在,当您通过脚手架或控制器生成时,您将创建 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
...
于 2015-04-12T21:45:29.143 回答
0

haml [not found]错误通常是因为捆绑包不完整。您是否尝试过运行bundle update然后重新运行生成器?

于 2012-02-08T11:51:57.857 回答