好的,所以我有一个关于如何最好地解决rails问题的问题。我将展示我是如何解决这个问题的,但是真的很希望得到关于这种方法的一些反馈意见,以及是否有更好的方法。解决多表继承问题的最佳途径
首先,我有一个基本的电子商务应用程序,包括客户,付款方式和付款。
现在支付方式可以有几种不同的类型,EG'Stripe,Braintree,Paypal'。这些都是付款方式,但他们有非常不同的逻辑来处理他们的工作。
理想情况下,我希望能够拨打customer.payment_methods
并收到付款方式的关系。我还希望能够拨打customer.stripe_payment_methods
,并获得Stripe方法。
我最初想到使用和STI模型,但这似乎效率低下,因为每种付款方式有不同的列它依赖。
在表格中存储类型字段似乎很浪费。
以下是相关车型
class PaymentMethod
scope :stripe, -> {where(type: 'PaymentMethod::Stripe')}
scope :paypal, -> {where(type: 'PaymentMethod::Paypal')}
# Lists available payment types
def self.available_types
PaymentMethod.subclasses.map { |d| [d::NAME, d.to_s] }
end
end
class PaymentMethod::Stripe < PaymentMethod
#performs Stripe specific methods
end
class PaymentMethod::Paypal < PaymentMethod
#performs Paypal specific actions.
end
这些都使用payment_methods
表。这是按照我的意图运作的,但感觉马虎。
有没有更好的方法来做到这一点?