在轨道嵌套路线上需要帮助

时间:2019-04-25 02:52:55

标签: ruby-on-rails

我想获得一条类似的路线

GET /example/notifications/status, to: example/notification#status
POST /example/notifications/disable to: example/notification#disable

这就是我所做的

resources :example, only => %i[index] do
  collection do
    resources :notifications, :only => [] do
      collection do
        get :status
        post :disable
      end
    end
  end  
end 

它获得正确的路径,但指向notification#status而不是example/notification#status

有什么办法可以让我获得正确的路径和控制器期望的代码吗

get "notifications/status", :to => "example/notifications#status"

2 个答案:

答案 0 :(得分:0)

您可以使用namespace来实现此目的,如下所示,

在您的config/routes.rb文件中

namespace :example do
   collection do
      get :status
      post :disable
   end
end

它将执行example/notification#status操作。

有关更多信息,请参见here

答案 1 :(得分:0)

请勿使用resources,因为您(显然)不希望路线上有任何参数。改为使用namespace

namespace :example do
  namespace :notifications do
    get   'status'
    post  'disable'                                                                                                                                                                                                                     
  end
end

给你:

$ rails routes -g example
                       Prefix Verb URI Pattern                              Controller#Action
 example_notifications_status GET  /example/notifications/status(.:format)  example/notifications#status
example_notifications_disable POST /example/notifications/disable(.:format) example/notifications#disable