2017-10-20 44 views
1

目前我有一個路由叫requests,可能有GET/POST端點。但另一個要求是實現以下格式:/api/requests/syncRails - 爲主路由添加一個'GET'子路由

我試着在routes.rb如下:

Rails.application.routes.draw do 
    resources :requests do 
    get "sync" 
    end 
end 

但是這給了我以下格式:

/請求/:REQUEST_ID /同步

如何創建一個子路由爲requests/sync,而不將其作爲/:request_id/sync的子路由?

回答

3

查看guide。具體來說,收集路線。你會做這樣的事情:

Rails.application.routes.draw do 
    resources :requests do 
    collection do 
     get "sync" 
    end 
    end 
end 

,這將給你requests/sync

要拿起了sync_controller問題...

個人,不知道你實際上在做什麼太多,我會保留sync作爲requests_controller的行動。喜歡的東西:

class RequestsController < ApplicationController 
    ... 
    def sync 
    ... 
    end 
    ... 
end 

雖然sync標準的REST風格的動作之一,它似乎不是創建一個新的控制器更自然的我。總的來說,但並非總是如此,我認爲控制器是名詞導向的(例如,'請求',就你而言),動作是動詞導向的。 「同步」對我來說似乎比名詞-y更加動詞。

可能按照Cyzanfar的建議做了一些事情。但是,我建議你問問自己:

  • 你是否需要所有標準動作sync_controller
  • 是否有從Requests::RequestsController繼承的一些有意義的理由?
  • 你甚至需要Requests::RequestsControler或者你可以只是做RequestsController,然後有從RequestsControllerRequests::SyncController繼承(這似乎不太折磨我)?
  • 可能還有其他重要的問題,我並不是在意的。
+0

謝謝你,這個工作。最後一個擴展:我怎樣才能爲'sync'創建一個控制器?它被放置在'requests'的同一個控制器中嗎?還是它是一個單獨的控制器? – Dinuka

+1

我認爲你可能正在尋找的是一個命名空間。你會有一個父請求控制器和一個子同步控制器。你想讓我告訴你如何做到這一點? – Cyzanfar

+1

是的,請:) :) @Cyzanfar你能更新答案嗎? – Dinuka

1

這裏是另一種方式與您的命名空間的控制器來實現這一目標,這樣你可以有syncrequests鮮明的控制器在請求控制器將充當父(基本)控制器。

的routes.rb

namespace :requests do 
resources :sync 
end 

請求/ requests_controller。RB

class Requests::RequestsController < ApplicationController 
end 

請求/ sync_controller.rb

class Requests::SyncController < Requests::RequestsController 
end 

現在你要請求下嵌套的CRUD路徑

/請求/同步/新

/requests/sync/index

/請求/同步/創建 ...

+0

是的,這是另一種方式!謝謝你的詳細解答,隊友! :) – Dinuka

+1

非常歡迎@RickGrimesTheCoder。快樂的編碼! – Cyzanfar