У меня есть действие контроллера в рельсах, которое должно проверять, является ли текущий статус транзакции транзакцией либо «отправлено_объект», либо «авторизован», а затем void транзакция, но если статус " поселился ", то возврат сделка. Как-то контроллер упраздняет все транзакции и не работает так, как я этого хочу. Вот пример моего кода:Rails условная логика не работает
@transaction = Braintree::Transaction.find(@id)
if @transaction.status == "authorized" || "submitted_for_settlement"
@result = Braintree::Transaction.void(@id)
elsif @transaction.status == "settled"
@result = Braintree::Transaction.refund(@id)
end
if @result.success?
@order.update(status: "voided")
redirect_to orders_path, notice: "transaction successfully voided "
elsif @result.transaction
redirect_to orders_path, alert: "transaction could not be cancelled code: #{@result.transaction.processor_response_code} text: #{@result.transaction.processor_response_text}"
else
errors = @result.errors.map { |error| "Error: #{error.code}: #{error.message}" }
flash[:error] = errors
redirect_to orders
end
Я получаю сообщение об ошибке о сделках, которые обосновались, что говорит: «Сделки могут быть аннулированы, только если они имеют право или submitted_for_settlement», но все сделки, которые разрешены и представлены для урегулирования стреляют правильно.
Что еще более тревожно, контроллер будет аннулировать статус в базе данных, даже когда я получу ошибку, а транзакции с фиксированными настройками остаются неизменными.
Почему я получаю эту ошибку?
Я попробовал это, и теперь я получаю неопределенный метод for nil: Ошибка NilClass – simon
Тогда каково возвращаемое значение 'void' или' refund'? Что делать, если '@ transaction' не авторизовано, отправлено_очередной или не разрешено? – Aetherus
Я проверил транзакцию.status braintree отправляет обратно, и ее показывается как «улаженный». Это ошибка рельсов, вызванная логикой. Я получаю ошибку, потому что вызов api никогда не был создан, и я проверяю результат, который никогда не отправлялся. Если статус был чем-то иным, чем разрешенным, отправленным_for_settlement или установленным, он будет отображаться здесь: redirect_to orders_path, alert: «транзакция не может быть отменена. Код: #{@result.transaction.processor_response_code} текст: #{@result.transaction.processor_response_text} "n – simon