Очень трудно понять, что именно вы пытаетесь сделать. Как уже указывал @ehabkost, если возникает исключение, выполнение в любом случае прерывается, поэтому вам ничего не нужно делать. Все, что идет после кода, вызвавшего исключение, все равно не будет выполнено, ведь это целая точка исключений.
Делает ли это то, что вы хотите?
existing_comments = Comment.all
begin
ActiveRecord::Base.transaction do
results.each do |row|
Comment.create!(row)
end
end
rescue # You should *never* do this!
else
existing_comments.destroy_all
end
Кстати: вы не должны никогда , ни при каких обстоятельствах, просто слепо спасать все исключения. Вы должны когда-либо спасать точно тех, кого вы ожидаете. Вы действительно думаете, что будет хорошей идеей просто слепо проглотить, скажем, ThreadError
, даже не заметив этого? Существует только 39 прямых подклассов ActiveRecordError
, возможно, один из них более уместен, чем просто спасение всех исключений (или, по крайней мере, всех StandardError
исключений).