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。
答案 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中