我正在关注Ryan Bates 的 railcast 146,它真的很有帮助。但是,我试图从流程中删除购物车对象,并单独处理订单。我遇到的问题是如何确定使用两次的金额:一次设置购买,然后一次实际执行。这是我采取的做法,但它暴露了 return_url 中的数量,我认为这可能是不好的做法:
class OrdersController < ApplicationController
def express
response = EXPRESS_GATEWAY.setup_purchase(params[:amount],
:ip => request.remote_ip,
:return_url => new_order_url(:amount=>params[:amount]),
:cancel_return_url => root_url
)
redirect_to EXPRESS_GATEWAY.redirect_url_for(response.token)
end
def new
@order = Order.new(:express_token => params[:token], :price_in_cents=>params[:amount])
end
然后在视图中,我添加了一个带有金额的隐藏字段,以便在创建订单时它具有内置的金额(我在订单模型中添加了一个 price_in_cents 字段)。它工作正常,但将金额作为参数公开可能有点不确定。最后,购买代码如下所示:
def purchase
response = process_purchase
transactions.create!(:action => "purchase", :amount => price_in_cents, :response => response)
cart.update_attribute(:purchased_at, Time.now) if response.success?
response.success?
end
简而言之,如何在不传递参数中的金额的情况下做到这一点?
谢谢!