【发布时间】:2010-11-12 11:31:51
【问题描述】:
如何在 Rails 记录器中保存 SQL 事务块?
例如,我有以下交易:
>> Client.transaction do
?> Client.find_by_name('Pavel').withdraw(2000)
>> Client.find_by_name('Elena').deposit(2000)
>> raise ActiveRecord::Rollback
>> end
=> nil
完成工作后,下一行将被添加到 log/development.log:
SQL (0.4ms) UPDATE "balances" SET "amount" = 8000 WHERE ("balances"."id" = 1)
SQL (0.2ms) UPDATE "balances" SET "amount" = 7000 WHERE ("balances"."id" = 2)
但是,上述事务不会更新数据库,并且 SQL 输出会造成混乱。
应该是这样的:
BEGIN;
UPDATE "balances" SET "amount" = 8000 WHERE ("balances"."id" = 1);
UPDATE "balances" SET "amount" = 7000 WHERE ("balances"."id" = 2);
ROLLBACK;
在使用事务时如何获取正确的 SQL 输出?
谢谢。
Debian GNU/Linux 5.0.6;
红宝石 1.9.2;
Ruby on Rails 3.0.1;
Sqlite 3.7.3.
【问题讨论】:
标签: ruby-on-rails logging activerecord transactions