【问题标题】:Rails 2.3.2 trying to render ERB instead of HAMLRails 2.3.2 尝试渲染 ERB 而不是 HAML
【发布时间】:2009-07-19 17:06:50
【问题描述】:

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。

【问题讨论】:

  • 我已经重新安装了 Rails,现在我不再遇到问题了。不知道它是从哪里传来的。

标签: ruby-on-rails haml


【解决方案1】:

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

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

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

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

$ gem install haml

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

祝你好运!

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

【讨论】:

  • 如上所述,我已经尝试过了。不过,我不再有问题了。我不得不重新安装导轨两次才能使其正常工作。不过谢谢你=)
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    sudo gem install -v 2.3.2 rails
    

    【讨论】:

    • 我已经确认在我的 environment.rb 中指定 Rails 2.3.2 时没有 HAML 问题,但是 2.3.4 确实有问题(我安装了两个版本,所以我可以切换之间)。
    • 解决了我的问题。这是一个 html.haml 与 haml.html 文件扩展名的问题。有关详细信息,请参阅此答案中引用的帖子。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      gem 'haml', '3.1.3'
      

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

      【讨论】:

      • 如果你使用gem 'haml', '~&gt; 3.0',那应该允许它选择最新的3.x版本。
      【解决方案6】:

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

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

      但是,如果我在 controller 内的 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'
      

      附:这在 Rails 2.3.3

      【讨论】:

        【解决方案7】:

        可能你的文件名不对,如果index.html.haml_后面有空格,rails会出错...

        【讨论】:

        • 不,我在 Rails 应用程序目录中没有做任何更改。我只是重新安装了 Rails,它工作了 shrug
        【解决方案8】:

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

        【讨论】:

          【解决方案9】:

          我在使用 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!

          【讨论】:

            【解决方案10】:

            我也遇到过同样的问题。

            解决方案记录在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 中!!

            【讨论】:

            • 我不需要这样做,我只需要明确使用3.1.3版本
            【解决方案11】:

            已更新 - 不再实际:

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

            举例说明:

            test.haml
            # not
            test.html.haml
            

            5 年后更新:

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

            【讨论】:

            • 这对我来说无关紧要。Rails 总是呈现 .html.haml 和 .haml 文件
            • 是的,其实这一点都不好。这在大多数情况下都有效,除非您想根据询问的内容类型做出改变,例如test.js.haml(xhr 电话)和test.html.haml。最好是更明确。
            猜你喜欢
            • 1970-01-01
            • 2011-06-05
            • 2011-05-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-01-31
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多