我需要在我的Rails应用程序中做一些奇怪的事情。用户通过创建操作创建产品实例后,我需要将其保存,然后将其重定向到Braintree付款方式表单(如果他们尚未在其帐户中添加一个),然后才将其重定向到展示页面对于产品。
这是产品创建行动:
def create
@product = Product.new(product_params)
@product.set_user!(current_user)
if @product.save
if !current_user.braintree_customer_id?
redirect_to "/customer/new"
else
redirect_to view_item_path(@product.id)
end
else
flash.now[:alert] = "Woops, looks like something went wrong."
format.html {render :action => "new"}
end
end
Braintree客户控制器的确认方法是:
def confirm
@result = Braintree::TransparentRedirect.confirm(request.query_string)
if @result.success?
current_user.braintree_customer_id = @result.customer.id
current_user.customer_added = true
current_user.first_name = @result.customer.first_name
current_user.last_name = @result.customer.last_name
current_user.save!
redirect_to ## not sure what to put here
elsif current_user.has_payment_info?
current_user.with_braintree_data!
_set_customer_edit_tr_data
render :action => "edit"
else
_set_customer_new_tr_data
render :action => "new"
end
end
我想做的是什么?
答案 0 :(得分:1)
您可以在重定向到braintree表单之前将产品ID存储在会话变量中,然后在完成确认之后,只需从会话中读取此ID并重定向到产品展示操作。
if !current_user.braintree_customer_id?
session[:stored_product_id] = @product.id
redirect_to "/customer/new"
else
redirect_to view_item_path(@product.id)
end
请记住,如果用户知道产品ID,则只需输入有效的网址即可打开产品视图页面,因此您也应该处理此类情况。您可以将before_filter置于产品展示操作中,以检查用户是否具有脑树设置。如果你这样做,你就不需要在创造行动中有条件。您始终可以重定向到产品展示页面,而before_filter将检查用户是否需要更新braintree数据。