Sen yöntem işlemde çalıştırılan olup olmadığını görmek için
ActiveRecord::Base.connection.open_transactions
kullanabilirsiniz.
ActiveRecord::Base.connection.open_transactions == 0
yönteminiz bir işlemde yürütülür olmadığını ima eder. 0'dan büyük bir şey, yönteminizin bir işlemde gerçekleştirildiğini ima eder. Örneğin
ActiveRecord::Base.connection.open_transactions > 0
Güncelleme için: raylar belgelerinden
all database statements in the nested transaction block become part of the parent transaction
Yani açık işlem sayısı iç içe geçmiş bir işlemde bile biri olacak.
Bu benim konsola
ActiveRecord::Base.transaction do
User.first.update_attribute(:first_name, "something")
ActiveRecord::Base.transaction do
User.first.update_attribute(:last_name, "something")
p ActiveRecord::Base.connection.open_transactions
end
end
(0.3ms) BEGIN
User Load (0.8ms) SELECT "users".* FROM "users" LIMIT 1
(0.8ms) UPDATE "users" SET "first_name" = 'something', "updated_at" = '2013-11-20 18:33:52.254088' WHERE "users"."id" = 1
User Load (0.5ms) SELECT "users".* FROM "users" LIMIT 1
(0.4ms) UPDATE "users" SET "last_name" = 'something', "updated_at" = '2013-11-20 18:33:52.266976' WHERE "users"."id" = 1
1
(14.2ms) COMMIT
=> 1
var ve kod 'config.use_transactional_fixtures = TRUE ile bir testte çalışıyorsa, o zaman sana bir işlem daha derin ne olduğunu? C-'dir; – Phlip
@Phlip: Umarım güncellemenin sorunuzu yanıtlamasını beklerim – usha