Ruby版本:2.0.0
Rails版本:4.0.1
我有一个控制器来处理Paypal Express Checkout工作流程。当paypal报告成功付款时,我想继续create
订单。这是我目前的尝试:
def do_express_checkout
##
# Paypal logic ommited to keep this from being lengthy....
##
@do_express_checkout_payment_response = api.do_express_checkout_payment(@do_express_checkout_payment) if request.post?
if @do_express_checkout_payment_response.success?
redirect_to controller: :orders, action: :create, method: :post
end
end
路由是默认的rails routing:
resources :orders
现在,这只是重定向到/orders
(索引方法)。 我该怎么办?
答案 0 :(得分:2)
您无法重定向到POST
操作。 redirect_to
仅适用于GET
次请求。
使用resources :orders
时,create
和index
的路由看起来完全相同,但HTTP
动词除外:
orders GET /orders(.:format) orders#index
POST /orders(.:format) orders#create
当你这样做时
redirect_to controller: :orders, action: :create, method: :post
它为GET
生成/orders
请求,该请求转到index
操作。 method
不是redirect_to
的有效选项,因此会被忽略。
一个丑陋的解决方法,用create
动词为GET
操作创建重复路由:
resources :orders
get "create", to: "orders#create", as: :create_order
这将创建一条路线:
create_order GET /create(.:format) orders#create
然后您可以更新do_express_checkout
方法,如下所示:
if @do_express_checkout_payment_response.success?
redirect_to create_order_path
end