私は、トランザクションの現在のブレーンツリーステータスが "submitted_for_settlement"または "authorized"のいずれかであるかどうかを確認するためのコントローラアクションを持っています。voidトランザクションはステータスが "決済された "払い戻し取引。どういうわけか、コントローラはすべてのトランザクションを無効にして、私が望むように動作していません。ここに私のコードのサンプルです:レールの条件付きロジックが動作しない
@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された場合の取引にのみ無効することができます」と言い決済される取引上のエラーを取得していますが、許可と和解のために提出されているすべてのトランザクション正しく発射されています。
さらに問題があるのは、エラーが発生してもブレーントリー決済されたトランザクションが変更されていなくても、コントローラがデータベース内のステータスを無効にすることです。
なぜこのエラーが発生しますか?
@transaction.status == "authorized" || @transaction.status == "submitted_for_settlement"
に
私はそれを試してみましたが、今で未定義のメソッド取得しています「の成功を?」 nilの場合:NilClassエラー – simon
'void'または 'refund'の戻り値は何ですか? '@ transaction'が承認されていない場合、submit_for_settlementまたは決済された場合はどうなりますか? – Aetherus
私はtransaction.statusを確認しました。braintreeが返信して、それが "解決済み"として表示されています。それはロジックによって引き起こされるレールエラーです。 API呼び出しが決して行われず、決して送信されなかった結果をチェックしているので、エラーが表示されます。ステータスが承認されたもの、submit_for_settlement以外のものであれば、ここに表示されます:redirect_to orders_path、alert: "トランザクションをキャンセルできませんでした:#{@result.transaction.processor_response_code} text:#{@@result.transaction.processor_response_text} "n – simon