NoMethodError undefined 方法 '-@' 控制器 Ruby on Rails 中的 NoMethodError



上下文:我从存储库中提取了最新的代码,并试图确保我即将进行的更改能够使用该版本的代码。这是一个RubyonRails应用程序。同样值得注意的是,当运行我从网上提取的主应用程序时,这个错误不会出现。但是,如果我运行我的分支或克隆到环境中的主分支,我尝试的每个url都会出现错误。所以它就在我这边。

问题:一旦我转到localhost:3000,我就会得到以下错误:

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

我尝试过的:我在#rubyonrailsIRC频道上问了我的问题,没有人能够通过完整跟踪确定发生了什么(我没有在这里发布它,因为我不确定在这里做这件事的最佳方式是什么;它在代码块或块引号中看起来不太好)。我看过我的HomeController的索引方法,它被定义为:

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

我也在谷歌上搜索过,没有找到解决问题所需的方法。

到目前为止我学到了什么:-@是操作员。有些人可能会收到类似的错误,认为Ruby有的快捷方式

    variable = variable + 1

许多其他语言都有:

    variable++

下面是一个例子:未定义的方法`+@';对于false:FalseClass(NoMethodError)ruby

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

更新(2013年8月2日):问题似乎不一定存在于HomeController或home/index.html.erb视图中。我试图通过有效操作访问ANY url,但"…中的NoMethodError"更改为相应的[…]控制器#索引时发生了相同的错误。

更新(2013年9月2日):由于无论我尝试导航到哪个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的检查人员把我所有的双引号都转换成了单引号,没有什么可抱怨的。

提前感谢,Jake Smith

我猜这可能是相应视图页面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}"

我已经解决了这个问题!

修复方法:

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

进一步查询:

有人知道为什么这样做吗?我不知道在这一点上,我是否可以缩小导致问题的宝石,因为该应用程序现在正在工作(我可以访问所有具有相应视图的URL)。如果这个问题再次出现,我会一个接一个地删除宝石,以确定是哪一个至少对我来说造成了这个问题。但如果有人对此有任何见解,我想,一个更详细的答案会受到比我更多的人的赞赏。感谢所有到目前为止提供帮助的人!