【问题标题】:rails architecture/best practice questionrails架构/最佳实践问题
【发布时间】:2011-06-12 21:41:28
【问题描述】:

我一直在集思广益,想出最好的方法来做到这一点,并认为我应该向社区寻求一些想法/澄清。

基本上从一个支付控制器,我希望能够处理用户可能选择的各种支付选项。例如,我的控制器收到:payment_option => paypal 的发布请求。我想传递逻辑来处理特定于贝宝的操作,然后将 URL(到贝宝)交给控制器以重定向到。

我正在做一个params[:payment_option].constantize 来初始化一个 Paypal 类,但我遇到的问题是无法访问 paypal 需要的各种数据(即当前用户信息、请求 IP 地址、cookie 数据、url 帮助程序、等等)

然后我想也许我可以有一个贝宝模块,但是如何以编程方式包含正确的支付模块?似乎我可能误用了模块概念,因为我会将模块用于特定逻辑,而不是共享逻辑。

因此,如果用户改为选择 google checkout,则无论支付方式如何,控制器都应该只需要通用指令

获取参数[:payment_option] 获取 payment_option_url 接收 payment_option_response

对做这种事情的好方法有什么想法吗?我过去也遇到过类似的情况,但从未确定这是最好的路线。

【问题讨论】:

    标签: ruby-on-rails architecture


    【解决方案1】:
    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             
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-04
      • 2015-07-13
      • 2020-06-12
      • 2010-11-17
      • 1970-01-01
      • 2013-10-01
      • 2020-07-13
      • 2013-05-07
      相关资源
      最近更新 更多