Проблема в вашем контроллере:
def create
@transaction = Transaction.new(transaction_params)
@transaction.account = current_account
redirect_to root_path
end
Вы инициализируете новый Transaction
объект, но он никогда не сохраняется! Вам нужно позвонить @transaction.save
для его создания, а затем обратный вызов сработает, как и ожидалось.
В противном случае вы могли бы использовать Transaction.create
вместо Transaction.new
, если это соответствует вашим потребностям, но с использованием ::new
тогда save
также вполне подойдет.
Вторая проблема: вы помещаете after_create :update_balance
в модель Account
, что означает, что она срабатывает при создании учетной записи, а не транзакции!
Попробуйте переместить его на правильную модель.