Rails 2.3.2试图渲染ERB而不是HAML

时间:2009-07-19 17:06:51

标签: ruby-on-rails haml

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中,但这也不起作用。

我无法弄清楚为什么突然导轨不会为我渲染haml。

11 个答案:

答案 0 :(得分:7)

嗨,似乎haml没有启用Rails插件,为了使它能够使用以下命令。

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

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

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

$ gem install haml

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

祝你好运!

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

我在Rails 2.3.4中遇到了同样的问题(请参阅此post)。多个gem卸载/ gem安装rails没有解决问题。但降级到Rails 2.3.2有效! (我知道HAML以前在这个版本的Rails中使用过这个项目。)

sudo gem install -v 2.3.2 rails

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

gem 'haml', '3.1.3'

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

答案 5 :(得分:0)

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

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

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

在视图路径应用/视图中缺少模板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'

P.S。这是在 Rails 2.3.3

答案 6 :(得分:0)

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

答案 7 :(得分:0)

更新 - 不再实际:

我仅将所有haml文件命名为.haml

举例说明:

test.haml
# not
test.html.haml

5年后更新:

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

我遇到过Ruby 1.9x,Rails 2.3.5和HAML 3.1这个问题。我认为问题的一部分是1.8中删除了一些已弃用的调用。

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

更好的是,在Ruby 1.9上前进到Rails 3!

答案 10 :(得分:0)

我遇到了同样的问题。

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

您需要添加

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

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