Я пытаюсь интегрировать 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])
не может быть найден. Каков наилучший способ реализовать это? Должен ли я каким-то образом сохранить предыдущий идентификатор или получить его другим способом? Должен ли я использовать другой контроллер? Спасибо!