Rails 2.3.2 trying to render ERB instead of HAML

2020-06-24 06:27发布

问题:

Rails is suddenly trying to render ERB instead of Haml and I can't figure out why. I've created new rails projects, reinstalled Haml, and reinstalled Rails.

Here's exactly the steps I take when making my application (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

Here's what the UsersController looks like:

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

My routes:

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

I now create 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 run the server... I navigate to localhost:3000\users and I get this error message:

Template is missing

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

For some reason Rails is trying to find and render .erb files instead of .haml files. vendor\plugins\haml\init.rb exists, untouched.

I've reinstalled Haml (Pretty Penny) multiple times and still get the same results. I've also tried adding config.gem 'haml' to my environment.rb but this also doesn't work.

I can't figure out why suddenly rails will not render haml for me.

回答1:

Hi it seem like haml is not enabled as Rails plugin ,in order to enable it use the following command .

Go to your application folder from the command prompt type the following

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

if this doesnot work try installing haml gem with the following code

$ gem install haml

I tried with above example , it did work for me ,i have haml gem installed in my ubuntu system .

Good luck !

NOTE: "haml --rails" was deprecated in HAML 3.1



回答2:

It's worth noting that the fact that the error message says that it couldn't find index.erb doesn't mean that it didn't look for index.haml too. The erb extension is hard-coded into the error message.

I thought that I had the same problem you describe, but it turned out that my application simply couldn't find my partial at all - it had nothing to do with the file extension.



回答3:

I had this same problem (see this post) with Rails 2.3.4. Multiple gem uninstall/gem install rails didn't fix the problem. But downgrading to Rails 2.3.2 worked! (I know HAML previously worked in this project with this version of Rails).

sudo gem install -v 2.3.2 rails


回答4:

Using Rails 3.1, I ran in to the same error and had to restart the web server.



回答5:

I have this old project in rails 2.3.18, where the gems are managed using bundler, and all I had to do was explicitly use version 3.1.3 It did not work with the latest version (4.0). So in my version I added

gem 'haml', '3.1.3'

did bundle install and restarted my development server :)



回答6:

Hmmm strange, this might be related.

According to: http://www.ruby-forum.com/topic/101346 you should use resource_url helpers in controllers and resource_path helpers in views. Right?

BUT, if I do use a resource_url helper in a redirect_to call inside my controller, then I get:

Missing template htp://localhost:4000/categories/new.erb in view path app/views

If I use the resource_path helper instead, there aren't any problems at all. Anyone knows what could be wrong?

Why is the resource_url helper trying to redirect to an .erb file?

This is the error from the server log:

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. This is in Rails 2.3.3



回答7:

maybe your file name is wrong, if you have a whitespace in the end of the index.html.haml_, rails will wrong...



回答8:

I ran into the same problem and I had to restart my server after installing Haml before my rails app recognized the changes.



回答9:

I was having this issue with Ruby 1.9x, Rails 2.3.5, and HAML 3.1. I believe part of the issue is that some of the deprecated calls in 1.8 were removed in 1.9.

IMHO, if you want to use HAML in Rails 2, you'd be better off downgrading to Ruby 1.8. (which is what I did to fix my problem). In Rails 2, you MUST have the gem.config "haml" in your config.

Even better, move forward to Rails 3 on Ruby 1.9!



回答10:

I've had this same problem.

The solution is documented in https://github.com/haml/haml/issues/672

You need to add

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

inside your config/environment.rb within the Rails::Initializer.run do |config| configuration block !!



回答11:

Updated - Not actual anymore:

I name all of my haml file only .haml

To illustrate:

test.haml
# not
test.html.haml

Update 5 years later:

I recommend to name them "file.format.haml", because its much more clear which format is the outcome...