我一直在集思广益,这是实现这一目标的最佳方式,并认为我应该向社区寻求一些想法/清晰度。
基本上来自单个支付控制器,我希望能够处理用户可能选择的各种支付选项。例如,我的控制器被:payment_option => paypal
的帖子请求命中。我想传递逻辑来处理paypal特定的操作,然后将一个url(到pay)重定向到控制器。
我正在做params[:payment_option].constantize
初始化Paypal类,但我遇到的问题是无法访问paypal所需的各种数据(即当前用户信息,请求IP地址,cookie数据,网址)助手等。)
然后我想也许我可以有一个paypal模块,但如何以编程方式包含正确的支付模块?而且我似乎错误地使用了模块概念,因为我会将模块用于特定的逻辑,而不是共享逻辑。
因此,如果用户改为选择google checkout,则无论付款方式如何,控制器都应该只需要通用说明
采取参数[:payment_option] 获取payment_option_url 收到payment_option_response
关于做这样的事情的好方法的任何想法?我过去遇到过类似的情况,但从未确定这是最好的路线。
答案 0 :(得分:2)
class Payment
def self.handle
raise 'must impliment in subclass'
end
end
class PaypalPayment < Payment
end
class GooglePayment < Payment
end
class PaymentController < ApplicationController
def show_me_the_money
case params[:payment_option]
when 'paypal': url = PaypalPayment.handle params
when 'google': url = GooglePayment.handle params
end
redirect_to url
end
end