Реализация корзины покупок Braintree в приложении rails / поиск предыдущих параметров [: id]?

Я пытаюсь интегрировать Braintree в свое приложение rails, в котором уже есть контроллер депозитов, модель и представление. Прямо сейчас в основном вы можете указать сумму, но у меня ее статус установлен на «Ожидание». Я хотел бы, чтобы пользователь мог сделать такой депозит, но затем оплатить его в любое время с помощью Braintree (аля корзина). Придется ли мне для этого создавать другой контроллер и/или модель? (Например, все примеры Braintree, которые я видел, требуют немедленной оплаты).

В частности, я пытался просто работать с «депозитами», которые у меня уже есть. Я поместил форму для имени пользователя, информации о кредитной карте и т. д. на странице депозитов «показать» и кнопку подтверждения. Кажется, это работает нормально, если все поля проходят проверку, однако это не так, когда возникает ошибка и снова отображается страница показа. В DepositsController.rb:

 def confirm
  @deposit = Deposit.find(params[:id])
  @result = Braintree::TransparentRedirect.confirm(request.query_string)
  if @result.success?
    render :action => "confirm"
  else
    render :action => "show"
   end
 end

Проблема в том, что :id теперь является идентификатором транзакции Braintree, а не идентификатором депозита (первичный ключ). Так что, конечно, Deposit.find(params[:id]) не может быть найден. Каков наилучший способ реализовать это? Должен ли я каким-то образом сохранить предыдущий идентификатор или получить его другим способом? Должен ли я использовать другой контроллер? Спасибо!


person butterywombat    schedule 26.12.2010    source источник


Ответы (1)


Короткий ответ: вы должны использовать модель корзины, связанную с этой моделью депозита, из того, что я могу собрать здесь. Однако, судя по другим вопросам, это ощущение может измениться.

Итак, исключительно исходя из того, что вы написали выше:

Если мы будем следовать подходу RESTful, вы должны создать Deposit#new для всех новых депозитов.

В вашем Deposit#create вы затем поместите всю свою логику в файл модели deposit.rb. эта логика включает в себя переход в Брейнтри и тому подобное.

Вы говорите, что работаете с депозитами, которые у вас уже есть, в таком случае они должны обрабатываться в методе Deposit#edit.

Дополнительные вопросы, которые я хотел бы задать вам в связи с этим, используете ли вы ActiveMerchant? Если нет, то почему?

person pjammer    schedule 26.12.2010
comment
Спасибо за быстрый ответ. Я решил просто упростить ситуацию и иметь только один ожидающий депозит, чтобы я мог легко его найти, плюс это имеет больше смысла (и мне не нужно думать о хранении идентификатора, о котором я беспокоился). Я также решил использовать вместо этого Paypal и использую ActiveMerchant. Спасибо - person butterywombat; 30.12.2010
comment
здорово. Так что я думаю, что я как бы помог вам с ответом. если бы только у stackoverflow была коробка, где вы могли бы выразить эту признательность... - person pjammer; 30.12.2010