は、誰かが私に言うことができる:なぜ私のobject.saveはある場所で動作し、別の場所で動作しませんか?これが機能する理由
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
私はレールコンソールで手動で同じコマンドを入力すると、両方のオブジェクトが正常に保存
が、2番目の1 ?:ていません私のスクリプト内で失敗します。私は、すべての変数( 'out'と '@outputs')が期待値を持っていることを確認し、再びコンソール内で動作していることを確認して、広範なデバッグを行っています。私はRuby 1.8.7、Rails 3.0.3、mysql2 gem version 0.2.7を使用しています。あまり前もってありがとう!
'save'呼び出しを' save! 'に変更しようとしてください。' save'がセーブが成功したかどうかによって 'true'または' false'を返す点を除いては同じです。 'save!'は、失敗の理由を詳述する、失敗したときに例外をスローします。あるいは、正常に保存されたときに正常に保存します。これは、このような問題をデバッグするのに最適です! –
すごいよ!また、私は '@ newOut.save'がdbの検査時に保存されていないことがわかっていてもtrueを返すと言及するのを忘れていました。これがどうなるか知っていますか? – pitachip