gpt4 book ai didi

ruby-on-rails - 完成后如何在循环内检查状态的结果?

转载 作者:太空宇宙 更新时间:2023-11-03 17:42:16 25 4
gpt4 key购买 nike

我有一个循环,可以为订单下的任何购买创建退款。

一个订单可以有多次付款(如果用户升级运费,在首次付款后将商品添加到购物车并重新提交等)。这对于电子商务来说并不常见,但在这种情况下是需要的。

我有这个循环:

orders_payments = Payment.where()
orders_payments.each do |btp|
transaction = gateway.transaction.find("#{btp.transaction_token}")
if transaction.status == "submitted_for_settlement"
void = gateway.transaction.void("#{btp.transaction_token}")
if void.success?
format.html { redirect_to user_orders_path, notice: 'Order refund was successfully refunded.' }
else
format.html { redirect user_orders_path, notice: 'Order refund unsuccessful.' }
end
elsif transaction.status == "settled"
refund = gateway.transaction.refund("#{btp.transaction_token}")
if refund.success?
format.html { redirect_to user_orders_path, notice: 'Order refund was successfully refunded.' }
else
format.html { redirect user_orders_path, notice: 'Order refund unsuccessful.' }
end
end
end

当然,由于重定向,这不起作用。但是除了不创建重定向之外……重要的是我有一个带有状态消息的重定向……我如何在创建循环后检查无效或退款的状态。

我希望能够检查哪些有效,哪些无效。

关于如何做到这一点有什么想法吗?

最佳答案

您可以使用多个循环将数据分成几类,而不是执行单个循环。

迭代的第一步是检索 transaction 对象。这也可以用 map 来完成:

transactions = orders_payments.map do |btp|
gateway.transaction.find("#{btp.transaction_token}")
end

下一步是 if 语句,它根据数据的状态将数据分成 2 组。你可以使用 select构建这两个列表:

submitted = transactions.select do |transaction|
transaction.status == "submitted_for_settlement"
end
settled = transactions.select do |transaction|
transaction.status == "settled"
end

下一步是处理两个列表并跟踪哪些列表成功或失败。听起来好像最后您想要每个交易组的“成功”和“失败”列表,剩下 4 个列表。 partition是这个用例的好方法:

successful_submitted, failed_submitted = submitted.partition do |transaction|
gateway.transaction.void("#{btp.transaction_token}").success?
end
successful_settled, failed_settled = settled.partition do |transaction|
gateway.transaction.refund("#{btp.transaction_token}").success?
end

关于ruby-on-rails - 完成后如何在循环内检查状态的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57634639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com