Да. Отдельные записи могут определять обратные вызовы after_commit и after_rollback , которые срабатывают после фиксации или отката транзакции. Их также можно настроить для определенных действий, таких как создание или уничтожение записи.
class Thing < ApplicationRecord
after_commit :cleanup_that_thing, on: :destroy
after_rollback :the_thing_wont_die, on: :destroy
private def cleanup_that_thing
...
end
private def the_thing_wont_die
...
end
end
На уровне отдельной транзакции вы должны использовать обычный begin / rescue / else .
begin
YourModel.transaction do
...
end
rescue
# it didn't work
else
# it did work
end