【问题标题】:undefined method `+@' for true:TrueClass未定义的方法 `+@' for true:TrueClass
【发布时间】:2012-06-07 15:54:03
【问题描述】:

我编写了这个任务来填充表格。 “飞行”表非常大(23000 个帖子)。但是当我们第二次通过循环时,我得到了这个奇怪的错误。

代码如下:

desc "Compute the AirlineTerminal Table"
task :populate_airlineterminals => :environment do
    #first delete content
    AirlineTerminal.destroy_all
    allFlights = Flight.all

        #AFTER ONE ITERATION THE ERROR HAPPENS
    allFlights.each do |f|
        atTerminal = AirlineTerminal.where(:airline_id => f.airline_id, :airport_id => f.airport_id, :terminal => f.terminal).first
        if atTerminal.nil?
            atTerminal = AirlineTerminal.new
            atTerminal.airport_id = f.airport_id
            atTerminal.airline_id = f.airline_id
            atTerminal.terminal = f.terminal
        end
        atTerminal.count++

        atTerminal.save #so far so good
    end
end

这就是我运行脚本时发生的情况,经过一次循环后它崩溃了。

$ rake populate_airlineterminals
rake aborted!
undefined method `+@' for true:TrueClass

【问题讨论】:

  • 使用 --trace 选项运行您的 rake 任务以获得完整的堆栈跟踪。至少你会知道是哪一行代码导致了问题。
  • 我命名了一个列数。不是很聪明,因为它与 .count 运算符发生冲突。要重命名,看看会发生什么。
  • renamed_column :airline_terminals, :count, :departure_count。没有不同。它是在第一次崩溃时从 f.save 循环回来的。
  • 运行一个空循环是可行的。是内部的东西让 Ruby 吓坏了。
  • 似乎是++ 吓到了它。

标签: ruby-on-rails-3 activerecord rake


【解决方案1】:

虽然我不知道错误是什么,但我敢打赌

atTerminal++

是罪魁祸首。据我所知 ++ 没有在 ruby​​ 中定义。你必须使用

atTerminal += 1

当然,除非您自己定义。也许它在解释代码时会导致错误。在 irb 中尝试一下。

【讨论】:

    【解决方案2】:

    Ruby 没有 ++ 或 -- 运算符,只有 += 和 -=

    Things That Newcomers to Ruby Should Know

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-14
      • 1970-01-01
      相关资源
      最近更新 更多