我有一个控制器Sagepay,它有许多自定义方法(不是RESTfull资源)。如何为这些操作编写路线?到目前为止我试过了:
namespace :sagepay, controller: :sagepay, as: :sagepay do
post :notification
get :iframe_breaker
get :accept_payment
end
然而,这会尝试映射到sagepay/sagepay_controller
而不是简单的sagepay_controller
。
显然我可以这样做:
match '/sagepay/notification' => 'sagepay#notification', via: :post, as: sagepay_notification
(etc)
哪个有效,但这不是我要找的解决方案。有什么方法可以用普通块写它吗?
答案 0 :(得分:0)
获得sagepay/sagepay_controller
的原因是namespace
被使用的原因。要获得sagepay/notification
,您可以定义资源并在其中添加collection
路由,如下所示:
# config/routes.rb
resource :sagepay, controller: :sagepay do
collection do
post :notification
get :iframe_breaker
get :accept_payment
end
end
更新:
为了只定义集合中定义的路由并避免定义Rails创建的七条其余路由,您可以将only
选项传递给resource
定义,如下所示:
# config/routes.rb
resource :sagepay, controller: :sagepay, only: [] do
collection do
post :notification
get :iframe_breaker
get :accept_payment
end
end
答案 1 :(得分:0)
我想我找到了解决方案:
scope 'sagepay', controller: :sagepay, as: :sagepay do
post :notification
get :iframe_breaker
get :accept_payment
end