我正在尝试将Braintree集成到我已经拥有存款控制器,模型和视图的rails应用程序中。现在基本上你可以指定金额,但我的状态设置为“待定”。我希望用户能够进行这样的存款,然后使用Braintree(ala购物车)随时支付。我是否必须创建另一个控制器和/或模型才能执行此操作? (例如,我见过的所有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交易ID,而不是存款ID(主键)。所以当然无法找到Deposit.find(params[:id])
。
实现这个的最佳方法是什么?我应该以某种方式存储以前的ID还是以另一种方式获取它?我应该使用其他控制器吗?谢谢!
答案 0 :(得分:1)
简短的回答是你应该使用一个Cart模型,从我可以在这里收集的内容连接到这个存款模型。然而,基于其他问题,这种感觉可能会改变。
所以,完全基于你上面写的内容:
如果我们遵循RESTful方法,您应该为所有新存款创建Deposit#new
。
在Deposit#create
中,您可以将所有逻辑放入deposit.rb
模型文件中。这个逻辑包括,去Braintree等。
您说您正在使用已有的存款,在这种情况下,应使用Deposit#edit
方法处理这些存款。
在这方面我会问你的其他问题,你使用的是ActiveMerchant吗?如果没有,为什么不呢?