如何在rails中调试helper的未定义方法

时间:2011-06-14 19:15:18

标签: ruby-on-rails rubygems installation

我有一个在Ubuntu虚拟机和几个不同安装上启动并运行的rails应用程序。

我有一台新计算机,在安装了Ruby和Rails(使用rvm)后,我可以运行该应用程序但是在访问视图时找不到帮助程序函数。 helper :all行位于ApplicationController

我很确定这是我的环境而不是应用程序的问题。是否有遗失的宝石会导致这个问题?

您能否推荐我可以采取的任何步骤来调试此问题?

MacBook-Air:cyberdojo mike$ ruby -v
ruby 1.8.7 (2011-02-18 patchlevel 334) [i686-darwin10.7.0]
MacBook-Air:cyberdojo mike$ rails -v
Rails 2.3.11

我得到的实际错误是:

NoMethodError in Dojo#create

Showing app/views/dojo/create.html.erb where line #62 raised:

undefined method `ellided_name' for #<ActionView::Base:0x101fabf70>
Extracted source (around line #62):

59:        value="<%=@dojo.name-%>" />
60: 
61: <h1 title="<%= @dojo.name-%>">   
62:   <%= ellided_name(@dojo.name, 40) %>
63: </h1>
64: 
65: <table align="center">

源代码可以在这里看到:https://github.com/meekrosoft/cyberdojo

1 个答案:

答案 0 :(得分:2)

您的vendor目录有一堆符号链接到/usr/share/rails。这可能就是为什么它在一些服务器上工作(因为在那些服务器上那些符号链接正在工作)而不在其他服务器上。

你的助手不能正常工作,因为他们应该在模块内,所以app/helpers/ellided_name.rb应该有:

module EllidedName
  # code you have in the file now
end

我猜测一些旧版本的Rails(你服务器上/usr/share/rails中的那个)允许使用非模块语法。

警告基于config/environments.rb此应用中的2.1.0已存在很长时间,如果/usr/share/rails版本接近2.1,那么这个将是你在2.3中尝试运行这个应用程序的许多问题中的第一个。

更新

OP在我的推荐中发现了一个空白,我只是在这里为在谷歌中发现这个的人添加它 - 他需要在文件名中添加_helper后缀,以及在文件中添加module包装器,他必须将app/helpers/ellided_name.rb更改为app/helpers/ellided_name_helper.rb并且(他没有说,但我确定)需要反映的模块名称这个,EllidedNameHelper而不仅仅是EllidedName