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