У меня есть модель бронирования, которая меняет статус с помощью AASM
Модели / booking.rb
before_validation :item_availability, if: -> { pending? || approved? }
enum status: [:pending, :approved, :rejected, :on_loan, :returned]
aasm column: :status, enum: true, whiny_transitions: true do
state :pending, initial: true
state :approved
event :approve do
transitions from: :pending, to: :approved
end
end
private
def item_availability
if quantity.to_f > item.quantity.to_f
errors.add(:base, "Not enough quantity for #{item.name} only #{item.quantity} left")
false
end
end
и у меня есть служба, которая вызывает утверждение! событие
def run
booking.transaction do
booking.approve!
booking.item.decrement!(:quantity, booking.quantity)
BookingsMailer.send_approval(booking).deliver_now
end
rescue ActiveRecord::RecordInvalid => e
errors.add(:base, e.message)
false
end
Проблема здесь в том, что проверка выполняется, потому что количество больше, чем количество бронирования, но транзакция в моем сервисе не откатывается.
Согласно документации
Сохранение включает в себя запуск всех проверок в классе Job. Если
Флаг whiny_persistence установлен в true, исключение возникает в случае
отказ.
Я уже установил для whiny_transitions значение true, но