Braintree“购物车” - 在rails app中实现/找到以前的params [:id]?

时间:2010-12-26 14:03:10

标签: ruby-on-rails braintree

我正在尝试将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还是以另一种方式获取它?我应该使用其他控制器吗?谢谢!

1 个答案:

答案 0 :(得分:1)

简短的回答是你应该使用一个Cart模型,从我可以在这里收集的内容连接到这个存款模型。然而,基于其他问题,这种感觉可能会改变。

所以,完全基于你上面写的内容:

如果我们遵循RESTful方法,您应该为所有新存款创建Deposit#new

Deposit#create中,您可以将所有逻辑放入deposit.rb模型文件中。这个逻辑包括,去Braintree等。

您说您正在使用已有的存款,在这种情况下,应使用Deposit#edit方法处理这些存款。

在这方面我会问你的其他问题,你使用的是ActiveMerchant吗?如果没有,为什么不呢?