Rails - 添加' GET'分路到主要路线

时间:2017-10-20 18:53:18

标签: ruby-on-rails

目前我有一个名为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的子路线?

2 个答案:

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

以下是使用命名空间控制器来实现此目的的另一种方法,以便您可以为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路径

/请求/同步/新

/请求/同步/索引

/请求/同步/创建 ...