рельсы архитектура / вопрос передового опыта - PullRequest
1 голос
/ 12 июня 2011

Я придумал лучший способ сделать это, и решил, что мне следует обратиться к сообществу за некоторыми идеями / ясностью.

в основном из одного контроллера платежей, я хочу иметь возможность обрабатывать различныеварианты оплаты, которые может выбрать пользователь.например, мой контроллер получает сообщение с запросом :payment_option => paypal.я хочу выдать логику для обработки определенных операций PayPal, а затем вернуть контроллеру URL (для PayPal) для перенаправления.

Я делал params[:payment_option].constantize для инициализации класса Paypal, нопроблема, с которой я столкнулся, была не в состоянии получить доступ к различным частям данных, которые требуются PayPal (например, текущая информация о пользователе, IP-адрес запроса, данные cookie, URL-помощники и т.модуль, но как включить правильный модуль оплаты программно?и казалось, что я могу неправильно использовать концепцию модуля, потому что я буду использовать модуль для определенной логики, а не для общей логики.

, поэтому, если пользователь вместо этого выбирает Google Checkout, контроллер независимо от способа оплаты, нужны только общие инструкции

принимать параметры [: payment_option] получать payment_option_url получать payment_option_response

есть какие-нибудь мысли о хорошем подходе к выполнению чего-либо подобного?Я сталкивался с подобными сценариями в прошлом, но никогда не был уверен, что это был лучший маршрут.

1 Ответ

2 голосов
/ 12 июня 2011
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             
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...