为什么我的object.save在一个地方工作而在另一个地方失败?

时间:2011-11-08 21:38:43

标签: mysql ruby-on-rails-3

有人可以告诉我为什么会这样:

require 'rubygems'
require 'mysql2'

@inverters=Inverter.where(:mac=>@mac)
Inverter.transaction do
  @inverters.each do |inverter|
    inverter.ip = @client_ip
    inverter.save               # Object is saved:)!
  end
end

但这不是吗?:

require 'rubygems'
require 'mysql2'

@outputs=<a two dimensional hash>
Output.transaction do
  @outputs.each do |out|           
    @newOut = Output.new
    @newOut.inverter_id = out[:inverter_id]
    @newOut.eac = out[:eac]
    @newOut.pac = out[:pac]
    @newOut.vac = out[:vac]
    @newOut.iac = out[:iac]
    @newOut.epv = out[:epv]
    @newOut.ppv = out[:ppv]
    @newOut.vpv = out[:vpv]   
    @newOut.save                   # Object fails to save to db:(.

    # 2 lines of other code
  end
end

当我在rails控制台中手动输入相同的命令时,两个对象都成功保存,但第二个在我的脚本中失败。我做了大量的调试,确保所有变量('out'和'@outputs')具有预期的值,并且它们都在控制台中运行。我使用的是Ruby 1.8.7,Rails 3.0.3和mysql2 gem version 0.2.7。非常感谢你!

1 个答案:

答案 0 :(得分:0)

我做的第一件事就是在终端中打开一个单独的选项卡,导航到我的rails app文件夹,然后通过键入以下行跟踪mySQL在幕后发生的事情:tail -f log / development.log。我可以看到运行上面第二个不工作的脚本,在INSERT进入输出表行后的日志中,它只会说'ROLLBACK'。发生这种情况的原因是我在@ newOut.save语句之后有两行随机代码。当我从事务循环中取出这两行时,一切正常。这显然是一个全新的错误,但我希望它可以帮助某人。