路由到非宁静的控制器

时间:2014-01-02 12:20:29

标签: ruby-on-rails ruby routes

我有一个控制器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)

哪个有效,但这不是我要找的解决方案。有什么方法可以用普通块写它吗?

2 个答案:

答案 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