4

上下文: 我从存储库中提取了最新的代码,并试图确保我将要推送的更改能够与该版本的代码一起使用。这是一个 Ruby on Rails 应用程序。另外值得注意的是,在运行我从网络上提取的主应用程序时,不会出现此错误。但是,如果我运行我的分支或克隆到我的环境中的主分支,我尝试的每个 url 都会出现错误。所以它在我的尽头。

问题: 当我转到 localhost:3000 时,我收到以下错误:

NoMethodError in HomeController#index
undefined method `-@' for #<ActionDispatch::Response:0x64fd460>

我尝试了什么: 我在#rubyonrails IRC 频道上提出了我的问题,但没有人能够通过完整跟踪确定发生了什么(我没有在这里发布它,因为我不确定什么是最好的方法在此处执行此操作;在代码块或块引用中看起来不太好)。我查看了 HomeController 的 index 方法,它的定义如下:

    def index
      @groups = @current_user.groups
      @things = Thing.where(:group_id => @groups.map{|e|e.id})
    end

我也用谷歌搜索过,还没有找到解决问题所需的东西。

到目前为止我学到了什么: -@ 是一个运算符。有些人可能会在假设 Ruby 有快捷方式时收到类似的错误

    variable = variable + 1

许多其他语言都有:

    variable++

下面是这种情况的一个例子:Undefined method `+@' for false:FalseClass (NoMethodError) ruby

问题: 有人对如何在这里找到问题有任何进一步的建议吗?另外,如果我可以轻松地将 Full Trace 放在这里,以美观的方式格式化,有人会告诉我怎么做吗?我对这个不知所措:(

更新(2/8/2013): 似乎问题不一定存在于 HomeController 或 home/index.html.erb 视图中。我试图通过有效的操作访问任何 url,同样的错误发生在“NoMethodError in ...”更改为相应的 [...]Controller#index 时。

更新(2013 年 2 月 9 日): 由于无论我尝试导航到哪个 url,都会发生此错误,因此我决定查看 config 文件夹中的 routes.rb 文件。这次我通过 ruby​​mine 而不是命令行运行我的服务器,这让我更容易阅读。我开始查看所有吐出的内容,并注意到一条感兴趣的行,其中包括:

["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 检查东西将我所有的双引号都转换为单引号,并且真的没有什么可抱怨的。

在此先感谢,杰克史密斯

4

2 回答 2

1

我猜这也可能是相应视图页面 Home/index.html.haml 中的语法错误。我怀疑变量调用前面有意外的“-”。我试图在我的 Rails 平台中模拟类似的场景,并在浏览器上查看以下页面

undefined method `-@' for false:FalseClass

正确的代码行

%h1 All Movies
= "filtervalue=#{@isFilterOld}"
= "Sortvalue=#{@isSortOld}"

编辑以模拟错误(观察 isFilterOld 变量前面的 - )

   %h1 All Movies
    = "filtervalue=#{-@isFilterOld}"
    = "Sortvalue=#{@isSortOld}"
于 2013-02-08T05:40:50.510 回答
1

我已经解决了这个问题!

什么解决了它:

  1. 转到您的 gem 所在的目录(对我来说是 C:\RailsInstaller\Ruby1.9.3\lib\ruby\gems\1.9.1)
  2. 删除除捆绑器之外的所有宝石
  3. 确保从 /cache/、/gems/ 和 /specifications/ 文件夹中删除 gem(我刚从 /gems/ 文件夹中删除了它们,并bundle install表示它仍然可以找到 gem)
  4. bundle install

进一步查询:

有人知道为什么会这样吗?我不知道此时我是否可以缩小导致问题的范围,因为该应用程序现在正在运行(我可以访问所有具有相应视图的 url)。如果问题再次出现,我将一一删除宝石以确定哪一个至少对我造成了问题。但是,如果有人对此有任何见解,我认为,除了我之外,还有更多的人会非常感谢更详细的答案。感谢所有迄今为止提供帮助的人!

于 2013-02-13T23:48:31.657 回答