【发布时间】:2013-02-08 05:08:40
【问题描述】:
背景: 我从存储库中提取了最新的代码,并尝试确保我将要推送的更改能够与该版本的代码一起使用。这是一个 Ruby on Rails 应用程序。另外值得注意的是,在运行我从网络上提取的主应用程序时,不会出现此错误。但是,如果我运行我的分支或克隆到我的环境中的主分支,我尝试的每个 url 都会出现错误。所以它在我的尽头。
问题: 我一转到 localhost:3000,就会收到以下错误:
NoMethodError in HomeController#index
undefined method `-@' for #<ActionDispatch::Response:0x64fd460>
我的尝试: 我在 #rubyonrails IRC 频道上提出了我的问题,但没有人能够通过 Full Trace 确定发生了什么(我没有在此处发布,因为我不确定什么是最好的在此处执行此操作的方法;在代码块或块引用中看起来不太好)。我查看了 HomeController 的 index 方法,其定义如下:
def index
@groups = @current_user.groups
@things = Thing.where(:group_id => @groups.map{|e|e.id})
end
我也用 Google 搜索了一遍,但没有找到解决问题的方法。
到目前为止我学到了什么: -@ 是一个运算符。有些人在假设 Ruby 有快捷方式时可能会收到类似的错误
variable = variable + 1
许多其他语言都有:
variable++
这是一个例子:Undefined method `+@' for false:FalseClass (NoMethodError) ruby
问题: 有人对如何在这里找到问题有任何进一步的建议吗?另外,如果我可以轻松地将 Full Trace 放在这里,以美观的方式格式化,有人会告诉我怎么做吗?我对这个不知所措:(
更新(2013 年 2 月 8 日): 似乎问题不一定存在于 HomeController 或 home/index.html.erb 视图中。我试图通过有效的操作访问任何 url,同样的错误发生在“NoMethodError in...”更改为相应的 [...]Controller#index。
更新(2013 年 2 月 9 日): 由于无论我尝试导航到哪个 url,都会发生此错误,因此我决定查看 config 文件夹中的 routes.rb 文件。这次我通过 rubymine 而不是命令行运行我的服务器,这让我更容易阅读。我开始浏览所有吐出的内容,并注意到一条感兴趣的行,其中包括:
["private-key looking thing"] [127.0.0.1] Started GET "/" for 127.0.0.1 at 2013-02-09 18:20:52 -0700
似乎 routes.rb 中存在语法错误(这是我目前最好的猜测)。这并不能解释为什么这只是在具有相同代码集的本地环境中出现的问题,但我还需要解决什么问题?
在我筛选此文件时,是否有人有任何建议要注意的事项?就错误而言,不确定要寻找什么。 Rubymines 检查的东西将我所有的双引号都转换为单引号,并且真的没有什么可抱怨的。
提前致谢, 杰克·史密斯
【问题讨论】:
-
你能显示你在哪里找到@current_user 吗?
-
-@方法对应于一元否定运算符,同样适用于!@、+@等。显然有人在说-thing,其中thing是ActionDispatch::Response。 -
vijikumar:对于 ruby on rails 世界中的工作方式,我还是很陌生。你能详细说明你的问题吗?你的意思是@current_user 最终定义在哪里?
-
Jake:关闭来自@muistooshort 的非常有用的回复,您应该在您的应用程序中搜索任何包含
- thing的代码。如果这发生在您应用程序中的每条路由上,这意味着违规代码也必须在每个请求上执行,所以它在应用程序控制器或初始化程序中,或者您在任何地方使用的某个模型中......类似的东西。试试这个搜索,看看你能找到什么。 -
另一个技巧:做小的、增量的提交,不断地测试,然后当你遇到像这样的神秘错误时,你可以回到上一次提交并一点一点地重新实现你的更改,直到出现错误再次出现。有时这是追踪非常罕见的错误的最佳方式。
标签: ruby-on-rails controller nomethoderror unary-operator