Rails 5: параметры API объединяют два значения - PullRequest
0 голосов
/ 08 мая 2020

В моем приложении 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"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...