我已经有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
答案 0 :(得分:1)
我认为您需要将命名空间从“搜索”重命名为其他内容,因为它与资源:搜索冲突。如果您不想更改,那么您需要在资源上声明名称空间:搜索。
其次,我怀疑PATCH在这种情况下是正确的方法,因为PATCH应该在有现有资源的地方使用,我们需要部分更新它。