В моем приложении 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
routes:
namespace :api do
namespace :v1 do
resources :products, param: :uid
end
end
Но теперь я должен добавить новый параметр: дополнительная версия к существующему uid в запросах show / delete / create, чтобы он выглядел как uid_v {номер версии}, например. 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.
UPDATE:
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"}