I'm curious what will require such a design!
, , - , . , mysql Inner , (, MyIsam), -, (YUK!).
, Inner.create . , , . - :
create_inner = false
begin
Outer.transaction.do
...
create_inner = true
...
end
ensure
if create_inner
Inner.create(:blah)
end
end
, Inner. , created_inner false , , , , .
, Inner , Inner. after_create Inner. Inner.create , , , , . :
class Inner < ActiveRecord::Base
def self.ensure_created(&block)
Thread.current[:created_inner] = false
begin
block.call
rescue => e
if Thread.current[:created_inner]
Inner.create(:blah)
end
raise e
end
end
def after_create
Thread.current[:created_inner] = true
end
:
Inner.ensure_created do
Outer.transaction do
...
Inner.create(:blah)
...
end
end
, , , . . , ActiveRecord:: Rollback , Outer.transaction, , Inner . , . , , - !