为什么某些原因 payments.valid.first.source return 对 Spree::Order 为零?

Why are some reasons that payments.valid.first.source return nil for Spree::Order?

Spree 电子商务 3.3.0 Rails 5.1 Ruby2.5.7

我正在尝试提取为订单制作的 payment_selection。在 Spree::OrdersController 中,我正在使用:

payments.valid.first&.source

需要说明的是,payments 是 Spree::Payment::CreditCard 的数组,而不是 Spree::Payment::Check。

这完全取决于您使用的支付网关。即使它是基于 CC 的支付网关,也有一些不会将 CC 作为 Spree 的来源。

Spree 中的每种付款方式都有一个名为 source_required? 的方法:https://github.com/spree/spree/blob/a01ffd29b73f75cb234fcf5d368fb23553acf4d1/core/app/models/spree/payment_method.rb#L49

您应该检查您使用的是不是 returns true.