ruby-on-rails - Rails 5:API 参数结合了两个值
问题描述
在我的 Rails 5 API 应用程序中,我有一个产品,其中包含 uid 和 version 属性以及其他属性:仅使用 params :uid 它工作正常:
api/v1/products_controller.rb
def show
@product = Spree::Product.where(metauid: params[:metauid])
respond_to do |format|
format.json { render json: @product }
end
end
路线:
namespace :api do
namespace :v1 do
resources :products, param: :uid
end
end
但是现在我必须在 show/delete/create - Requests 中添加一个新参数 :version 到现有的 uid,使其看起来像 uid_v{versionnumber} 例如。foo_v1
到目前为止我尝试了什么:
路线:
namespace :api do
namespace :v1 do
resources :products, path: '/:uid/:version', only: [:show, :update, :create, :destroy] # index should be available without uid&version param
end
end
api/v1/products_controller.rb
def show
uid = params
@product = Spree::Product.where(uid: params[:uid]).where(version: params[:version])
respond_to do |format|
format.json { render json: @product }
end
end
但是,即使记录显示在我的 Rails 控制台中,我也会得到一个空数组而不是产品。
更新:
bundle exec rails routes shows:
GET /api/v1/products(.:format) spree/api/v1/products#index {:format=>"json"}
POST /api/v1/products(.:format) spree/api/v1/products#create {:format=>"json"}
new_api_v1_product GET /api/v1/products/new(.:format) spree/api/v1/products#new {:format=>"json"}
edit_api_v1_product GET /api/v1/products/:id/edit(.:format) spree/api/v1/products#edit {:format=>"json"}
GET /api/v1/products/:id(.:format) spree/api/v1/products#show {:format=>"json"}
PATCH /api/v1/products/:id(.:format) spree/api/v1/products#update {:format=>"json"}
PUT /api/v1/products/:id(.:format) spree/api/v1/products#update {:format=>"json"}
DELETE /api/v1/products/:id(.:format) spree/api/v1/products#destroy {:format=>"json"}
next_api_v1_checkout PUT /api/v1/checkouts/:id/next(.:format) spree/api/v1/checkouts#next {:format=>"json"}
解决方案
推荐阅读
- javascript - DOM外的浏览器Javascript中的自定义事件发射器/消费者
- php - 服务器关闭了phpseclib连接?
- sql - 指向新的 SQL Server 后网站停止正常工作
- c# - 使用 ASP.NET Core 启动时的默认路由
- php - PHP在上传图像时从React Native接收空数据?
- python - Django2.0;仍然无法了解重定向的工作原理
- elasticsearch - Logstash 聚合错误
- kotlin - 环氧树脂,Kotlin:使用 @ModelView 不会产生任何错误
- node.js - 错误:(gcloud.app.deploy)错误响应:[9]应用程序启动错误:
- react-native - React-native:POST 请求适用于 iOS 应用程序,但从 Android 提交时正文为空