目前我有一个名为requests
的路由可能有GET / POST端点。但另一个要求是实现以下格式:/api/requests/sync
。
我在routes.rb
中尝试了以下内容:
Rails.application.routes.draw do
resources :requests do
get "sync"
end
end
但这给了我以下格式:
/请求/:REQUEST_ID /同步
如何将子路线创建为requests/sync
,而不将其作为/:request_id/sync
的子路线?
答案 0 :(得分: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
不是标准RESTful操作之一,但对我来说似乎比创建新控制器更自然。一般而言,但并非总是如此,我认为控制器是面向名词的(例如,“请求”,在您的情况下)和动作是面向动词的。对于我来说,“同步”似乎比名词-y更加动词。
你可以按照Cyzanfar建议的方式做点什么。但是,我建议你问问自己:
sync_controller
?Requests::RequestsController
? Requests::RequestsControler
或者你可以RequestsController
然后让Requests::SyncController
继承RequestsController
(这似乎不那么折磨到我)?答案 1 :(得分:1)
以下是使用命名空间控制器来实现此目的的另一种方法,以便您可以为sync
和requests
设置一个独特的控制器,其中请求控制器将充当父(基本)控制器。
<强>的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路径/请求/同步/新
/请求/同步/索引
/请求/同步/创建 ...