向 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
我想知道是否有人可以给我任何建议。
我目前正在编写一个 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