NoMethodError未定义的方法' - @'控制器Ruby on Rails中的NoMethodError

时间:2013-02-08 05:08:41

标签: ruby-on-rails controller nomethoderror unary-operator

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

问题: 一旦我转到localhost:3000,我收到以下错误:

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

我尝试过的事情: 我已经在 #rubyonrails IRC频道上提出了我的问题,没有人能够通过Full Trace确定发生了什么(我没有在这里发布,因为我不确定什么是最好的在这里做到这一点的方法;它在代码块或块引用中看起来不太好。我查看了我的HomeController的索引方法,该方法定义如下:

    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

问题: 有没有人对如何在这里找到问题有任何进一步的建议?此外,如果我可以轻松地将完整跟踪放在这里,以美学上令人愉悦的方式格式化,有人会告诉我如何?我对此感到茫然:(

更新(2013年2月8日): 似乎问题不一定存在于HomeController和home / index.html.erb View中。我试图通过有效的操作访问任何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检查的东西将我的所有双引号转换为单引号,并没有任何其他可抱怨的东西。

提前致谢, 杰克史密斯

2 个答案:

答案 0 :(得分: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}"

答案 1 :(得分:1)

我已经解决了这个问题!

修正了什么:

  1. 转到你的宝石所在的目录(对我来说是C:\ RailsInstaller \ Ruby1.9.3 \ lib \ ruby​​ \ gems \ 1.9.1)
  2. 删除除bundler
  3. 以外的所有宝石
  4. 确保从/ cache /,/ gems /和/ specifications /文件夹中删除了gem(我刚刚从/ gems /文件夹中删除了它们,bundle install表示它仍然可以找到宝石)
  5. 运行bundle install
  6. 进一步查询:

    有人知道为什么会这样吗?我不知道在这一点上我是否可以缩小哪个gem导致问题,因为应用程序现在正在工作(我可以访问所有具有相应视图的URL)。如果问题再次出现,我将逐一删除宝石,以确定哪一个至少对我造成问题。但是,如果有人对此有任何见解,我认为更多的人会非常感谢更多的人,而不仅仅是我。感谢迄今为止所有帮助过的人!