Ruby on rails Rails附加补丁路径

Ruby on rails Rails附加补丁路径,ruby-on-rails,Ruby On Rails,我已经有CRUD了,我想添加一个额外的补丁路径,如下所示: PATCH /searches/:id(.:format) searches#update PATCH /searches/sync(.:format) searches/sync#perform 然而,当我调用api时,它总是返回一个错误 ActiveRe

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

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

PATCH    /searches/sync(.:format)                                       searches/sync#perform
然而,当我调用api时,它总是返回一个错误

ActiveRecord::RecordNotFound无法找到“id”=同步的搜索

有什么想法吗

同步控制器

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

我认为您需要将名称空间从“searches”重命名为其他名称,因为它与以下资源冲突:searches。如果不想更改,则必须在资源:搜索上方声明名称空间


第二,,在这种情况下,我怀疑补丁是正确的方法,因为补丁应该在存在现有资源的地方使用,我们需要对其进行部分更新。

我认为您有任何before\u过滤器来加载控制器中调用的@search object?您能添加控制器代码吗?嗯,但是SearchController和SyncController都没有before\u过滤器在Itan和我的应用程序\u控制器中,与搜索无关:/你能共享同步操作代码吗?谢谢你,顺便说一句,我正在更新搜索的用户\u id,但只会收到数据库中已经存在的id数组,你尝试过重命名名称空间“搜索”吗?还是将其位置替换为资源:搜索?
resources :searches, only: [:index, :update, :destroy]
namespace :searches do
  patch '/sync', to: 'sync#perform'
end