首页 > 解决方案 > 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"}

标签: ruby-on-rails

解决方案


推荐阅读