在rails api中对URL而不是ID发出删除请求

时间:2015-01-13 11:29:15

标签: ruby-on-rails api

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

我目前正在编写rails API,虽然它似乎不是最佳做法,而是执行DELETE调用

localhost:3000/products/:id

id而不是

localhost:3000/products/: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

有什么想法吗? 提前致谢

如果我发送删除请求的网址为http://localhost:3000/products/www.test.com,如果我发送删除请求的网址为No route matches [DELETE] "/products/www.test.com",则会收到错误http://localhost:3000/products/:url我收到错误{{ 1}}

我的销毁方法代码:

Couldn't find Product with 'id'=:url

1 个答案:

答案 0 :(得分:1)

我认为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