Rails其他补丁路由

时间:2017-09-19 03:31:42

标签: ruby-on-rails

我已经有CRUD了,我想添加一个额外的Patch路由,如下所示:

PATCH    /searches/:id(.:format)                                              searches#update

PATCH    /searches/sync(.:format)                                       searches/sync#perform

然而,当我进行api调用时,它总是会返回一个错误

ActiveRecord::RecordNotFound (Couldn't find Search with 'id'=sync)

有什么想法吗?

sync_controller

module Searches

  class SyncController < ApplicationController

    def perform
      search_ids = params[:search_ids]&.keys&.map { |key| params[:search_ids][key] } || []
      outcome = SearchSync.run(search_ids: search_ids, user: current_user)
      if outcome.success?
        render json: outcome.result
      else
        render json: outcome.errors.symbolic, status: 422
      end
    end

  end

end

路线

resources :searches, only: [:index, :update, :destroy]
namespace :searches do
  patch '/sync', to: 'sync#perform'
end

1 个答案:

答案 0 :(得分:1)

我认为您需要将命名空间从“搜索”重命名为其他内容,因为它与资源:搜索冲突。如果您不想更改,那么您需要在资源上声明名称空间:搜索。

其次,我怀疑PATCH在这种情况下是正确的方法,因为PATCH应该在有现有资源的地方使用,我们需要部分更新它。