向 URL 发出删除请求,而不是 rails api 中的 ID

making a delete request to URL rather than ID in a rails api

我想知道是否有人可以给我任何建议。

我目前正在编写一个 rails API,尽管这似乎不是最佳实践,但我还是执行了对

的 DELETE 调用
localhost:3000/products/:id

我宁愿去

localhost:3000/products/:url

并传入要删除的 URL,但是我目前已经有了这个,但我一直收到路由错误。

DELETE '/products/:url', to: 'products#destroy'

是我目前的路线,也是我上面指定的

resources :products

节。

我的整个路线文件:

AppName::Application.routes.draw do      
  resources :features do
  resources :feature_links
  end

  resources :wishlist_items

  resources :data_feeds
  get '/get_data_feeds', to: 'data_feeds#get_feed_url', as: 'feed_url'

  resources :genders

  resources :trends

  resources :sub_categories

  resources :color_tags

  resources :colors

  resources :categories

  delete '/products/:url', to: 'products#destroy'

  resources :products do
    member do
      get 'buy'
      post 'wish'
    end
  end
end

有什么想法吗? 提前致谢

如果我发送删除请求的 url 是 http://localhost:3000/products/www.test.com 我收到错误 No route matches [DELETE] "/products/www.test.com" 如果我发送删除请求的 url 是 http://localhost:3000/products/:url 我收到错误 Couldn't find Product with 'id'=:url

我的销毁方法代码:

 def destroy
    @product = Product.find(params[:url])
    @product.destroy
    respond_with(@product, status: 200)
 end

我认为 Rails 正在考虑将您的 URL 参数作为响应格式的规范。您可以按如下方式覆盖参数的约束:

constraints: { url: /[^\/]+/ }

这将确保 URL 参数可以是 / 以外的任何参数。整个路线应该是这样的:

delete "/products/:url", to: "products#destroy", constraints: { url: /[^\/]+/ }, as: :products_destroy_with_url

并像这样使用它:

link_to "Destroy", products_destroy_with_url_path("www.test.com"), method: :delete