2016-07-10 4 views
0

언젠가는 트랜잭션이 ActiveRecord :: Rollback을 허용하지 않습니다.ActiveRecord :: Rollback은 트랜잭션 롤백을 수행하지 않는 것 같습니다

예를

ActiveRecord::Base.transaction do 
    puts @shipment_list.status 
    @shipment_list.update(shipment_list_params) 
    raise ActiveRecord::Rollback 
end 
puts @shipment_list.status 

결과 실수가

CACHE (0.0ms) SELECT `shipment_lists`.* FROM `shipment_lists` WHERE `shipment_lists`.`id` = 24121 ORDER BY created_at DESC LIMIT 1 [["id", "24121"]] 
(0.2ms) BEGIN 
reserve 
(1.3ms) SELECT MAX(`audits`.`version`) AS max_id FROM `audits` WHERE `audits`.`auditable_id` = 24121 AND `audits`.`auditable_type` = 'ShipmentList' 
SQL (160.5ms) INSERT INTO `audits` (`action`, `auditable_id`, `auditable_type`, `audited_changes`, `created_at`, `remote_address`, `request_uuid`, `user_id`, `user_type`, `version`) VALUES ('update', 24121, 'ShipmentList', '---\nstatus:\n- reserve\n- 2\n', '2016-07-10 12:01:55', '127.0.0.1', 'efc5b6e7-c3f9-4b4a-a0fd-67651b2eeb20', 18, 'User', 19) 
SQL (0.3ms) UPDATE `shipment_lists` SET `status` = 2, `updated_at` = '2016-07-10 12:01:55' WHERE `shipment_lists`.`id` = 24121 
(0.2ms) ROLLBACK 
bill 

: 나는 그런 예를 가지고? 나는 정말로 곤경에 빠져있다.

+2

예제의 마지막 줄에'@shipment_list.reload'와'@shipment_list.status'를 사용해 볼 수 있습니까? –

+0

불행히도 이것은 아무런 효과가 없습니다 –

+1

롤백을하지 않는다고 생각하는 이유는 무엇입니까? 붙여 넣은 로그에는 '롤백'이 포함됩니다. 당신이 관찰하고있는 실제 문제는 무엇입니까? 그것이 당신이 기대하는 것과는 다른 무엇을보고 있습니까? – jrochkind

답변

0

실제로이 문제는 myISAM mysql 스키마 때문에 발생했습니다. 트랜잭션 롤백은 허용되지 않습니다.