Рельсы 3. Активная запись. Логирование. Показать блоки SQL-транзакций - PullRequest
0 голосов
/ 12 ноября 2010

Как я могу иметь блоки транзакций SQL в моем Rails logger?

Например, у меня есть следующая транзакция:


>> 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.

1 Ответ

0 голосов
/ 12 ноября 2010

Это не реализовано в ActiveRecord на самом деле.Вам нужно сделать какой-нибудь запрос на функцию для багтрека ActiveRecord, или сделать сам патч, или попытаться создать плагин для этого.

...