2013-08-27 3 views
0

У меня есть функция для сохранения некоторых данных для нескольких таблиц в той же базе данных mysql. Внутри функцииActiveRecord Откат нескольких транзакций

def process_data(dataA, dataB, dataC, dataD) 
# let's say dataA is saved to tableA, dataB to tableB, dataC to tableC, dataD to tableD 
ActiveRecord::Base.transaction do 
    begin 
     tableA.create(:dataA => dataA) 
     tableB.create(:dataB => dataB) 
     tableC.create(:dataC => dataC) 
     tableD.create(:dataD => dataD) # let's say error occurred here 
    rescue 
     ActiveRecord::Rollback 
    end 
end 
end 

Если есть исключение при создании новой записи внесенной, я хочу, чтобы откатить все (dataA, dataB, Datac).

Как я могу это достичь?

Спасибо.

ответ

1

Поднять ActiveRecord :: Откат внутри вашего блока транзакции, если вам нужно откатить

def process_data(dataA, dataB, dataC, dataD) 
ActiveRecord::Base.transaction do 
    begin 
     tableA.create(:dataA => dataA) 
     tableB.create(:dataB => dataB) 
     tableC.create(:dataC => dataC) 
     tableD.create(:dataD => dataD) # let's say error occurred here 
    rescue 
     # will rollback on any exception 
     raise ActiveRecord::Rollback 
    end 
end 
end 

см http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html для получения дополнительной информации.

+0

добавление 'рейза' исправил его. Спасибо. –

Смежные вопросы