3

Rails 突然尝试渲染 ERB 而不是 Haml,我不知道为什么。我创建了新的 Rails 项目,重新安装了 Haml,并重新安装了 Rails。

这正是我在制作应用程序时采取的步骤(Rails 2.3.2):

  rails> rails test
  rails> cd test
  rails\test> haml --rails .
  rails\test> ruby script\generate model user email:string password:string
  rails\test> ruby script\generate controller users index
  rails\test> rake db:migrate

这是 UsersController 的样子:

class UsersController < ApplicationController
  def index
    @users = User.all
  end
end

我的路线:

ActionController::Routing::Routes.draw do |map|
  map.resources :users
end

我现在创建views\users\index.html.haml

%table
  %th(style="text-align: left;")
    %h1 Users
  - for user in @users
    %tr
      %td= user.email
      %td= user.password

Annnd 运行服务器...我导航到localhost:3000\users并收到以下错误消息:

Template is missing

Missing template users/index.erb in view path app/views

出于某种原因,Rails 试图查找和呈现 .erb 文件而不是 .haml 文件。 vendor\plugins\haml\init.rb存在,未受影响。

我已经多次重新安装了 Haml (Pretty Penny),但仍然得到相同的结果。我也尝试将 config.gem 'haml' 添加到我的 environment.rb 中,但这也不起作用。

我不明白为什么突然 rails 不会为我渲染 haml。

4

11 回答 11

7

嗨,好像 haml 没有作为 Rails 插件启用,为了启用它,请使用以下命令。

从命令提示符转到您的应用程序文件夹,键入以下内容

  $ cd ..
  $ haml --rails <yourproject>

如果这不起作用,请尝试使用以下代码安装 haml gem

$ gem install haml

我尝试了上面的示例,它确实对我有用,我在我的 ubuntu 系统中安装了 haml gem。

祝你好运 !

注意:“haml --rails”在 HAML 3.1 中已弃用

于 2009-07-20T11:40:31.020 回答
3

值得注意的是,错误消息说它找不到 index.erb 并不意味着它也没有寻找 index.haml。erb 扩展名被硬编码到错误消息中。

我以为我遇到了你描述的同样的问题,但事实证明我的应用程序根本找不到我的部分 - 它与文件扩展名无关。

于 2010-04-14T11:41:05.137 回答
2

我在使用 Rails 2.3.4 时遇到了同样的问题(参见这篇文章)。多个 gem 卸载/gem install rails 没有解决问题。但是降级到 Rails 2.3.2 有效!(我知道 HAML 以前在这个项目中使用过这个版本的 Rails)。

sudo gem install -v 2.3.2 rails
于 2009-09-15T01:43:47.467 回答
1

使用 Rails 3.1,我遇到了同样的错误,不得不重新启动 Web 服务器。

于 2012-01-31T04:31:04.907 回答
1

我在 rails 2.3.18 中有这个旧项目,其中 gem 是使用 bundler 管理的,我所要做的就是明确使用 3.1.3 版本它不适用于最新版本(4.0)。所以在我的版本中我添加了

gem 'haml', '3.1.3'

捆绑安装并重新启动了我的开发服务器:)

于 2014-12-09T11:55:06.747 回答
0

更新 - 不再实际:

我只将我所有的haml文件命名为.haml

为了显示:

test.haml
# not
test.html.haml

5年后更新:

我建议将它们命名为“file.format.haml”,因为它更清楚哪种格式是结果......

于 2009-09-03T09:42:38.937 回答
0

也许你的文件名是错误的,如果你在 index.html.haml_ 的末尾有一个空格,rails 会出错......

于 2009-08-27T12:41:53.587 回答
0

我在使用 Ruby 1.9x、Rails 2.3.5 和 HAML 3.1 时遇到了这个问题。我相信部分问题是 1.8 中的一些已弃用的调用在 1.9 中被删除。

恕我直言,如果您想在 Rails 2 中使用 HAML,最好降级到 Ruby 1.8。(这是我为解决我的问题所做的)。在 Rails 2 中,您的配置中必须有 gem.config “haml”。

更好的是,在 Ruby 1.9 上继续使用 Rails 3!

于 2011-06-07T15:08:47.057 回答
0

我遇到了同样的问题,我必须在安装 Haml 后重新启动服务器,然后我的 Rails 应用程序才识别出这些更改。

于 2009-09-05T04:56:29.110 回答
0

我有同样的问题。

该解决方案记录在https://github.com/haml/haml/issues/672

您需要添加

config.after_initialize do 
  require 'haml'
  Haml.init_rails(binding)
end

Rails::Initializer.run do |config|配置块中的 config/environment.rb 中!!

于 2013-04-28T14:03:55.837 回答
0

嗯,奇怪,这可能是相关的。

根据:http ://www.ruby-forum.com/topic/101346您应该在控制器中使用resource_url助手,在视图中使用resource_path助手。正确的?

但是,如果我在我的控制器内部的redirect_to调用中使用了resource_url帮助器,那么我会得到:

视图路径 app/views 中缺少模板 htp://localhost:4000/categories/new.erb

如果我改用resource_path帮助器,则根本没有任何问题。有谁知道可能出了什么问题?

为什么resource_url助手试图重定向到 .erb 文件?

这是来自服务器日志的错误:

ActionView::MissingTemplate (Missing template http://localhost:4000/categories/new.erb in view path app/views):
haml (2.2.2) lib/haml/helpers/action_view_mods.rb:13:in `render'
app/controllers/categories_controller.rb:15:in `create'
haml (2.2.2) rails/./lib/sass/plugin/rails.rb:19:in `process'

PS这是在Rails 2.3.3中

于 2009-08-01T22:48:04.093 回答