Ruby 葡萄中的多路径参数

Ruby 葡萄中的多路径参数,ruby,api,grape,Ruby,Api,Grape,如何让Grape中的多个路由参数在Grape中工作 我可以让这条路线起作用: .../api/company/:cid 但当我尝试这个: .../api/company/:cid/members .../api/company/:cid/members/:mid 我会犯错误 下面是有效的代码 resource 'company' do params do optional :start_date, type: Date, desc: "Start date of range."

如何让Grape中的多个路由参数在Grape中工作

我可以让这条路线起作用:

.../api/company/:cid
但当我尝试这个:

.../api/company/:cid/members
.../api/company/:cid/members/:mid
我会犯错误

下面是有效的代码

resource 'company' do
params do
    optional :start_date, type: Date, desc: "Start date of range."
    optional :end_date, type: Date, desc: "End date of range."
end 
route_param :cid do
    get do
        {company_id: params[:cid]}
    end
end
class API::Company”…/api/company/:cid
#过程获取
结束
资源:各位议员有
描述“获取”
情妇
#你的情妇
结束
获取“/”do#=>“…/api/company/:cid/members/”
#过程获取
结束
路线参数:中do
描述“获取”
情妇
#你的情妇
结束
获取“/”do#=>”…/api/company/:cid/members/:mid”
#过程获取
结束
结束
结束
结束
结束
结束
你可以那样做。或者,您可以创建两个不同的资源文件并将成员装载到公司。像这样:

# api/company.rb
class API::Company < Grape::API
  resource :company do
     route_param :cid do
        desc "GET"
        params do
          # your params
        end
        get '/' do  # => '.../api/company/:cid
          # process get
        end


        mount API::Members
     end
  end
end

# api/member.rb
class API::Member < Grape::API
  resources :members do
    desc "GET"
    params do
      # your params
    end
    get '/' do  # => '.../api/company/:cid/members/'
      # process get
    end


    route_param :mid do
    desc "GET"
    params do
      # your params
    end
    get '/' do # => '.../api/company/:cid/members/:mid'
      # process get
    end
  end
end
#api/company.rb
类API::公司”…/api/company/:cid
#过程获取
结束
mountapi::成员
结束
结束
结束
#api/member.rb
类API::成员“…/api/company/:cid/members/”
#过程获取
结束
路线参数:中do
描述“获取”
情妇
#你的情妇
结束
获取“/”do#=>”…/api/company/:cid/members/:mid”
#过程获取
结束
结束
结束

希望这有助于

另一种方法是使用regexp验证ID

resource 'company' :requirements => { :id => /[0-9]*/, :mid => /[0-9]*/ } do

  get '/:id' do
    # returns company
  end

  get ":id/members" do
    members = Company.find_by_id(params[:id]).members
    present members, :with => Members::MemberResponseEntity
  end

  get ":id/members/:mid" do
    member = Member.find_by_id(params[:mid])
    present member, :with => Members::MemberResponseEntity
  end

end

你能把你得到的错误加在这个问题上吗?此外,生成这些错误的代码(假设您尝试了一些变体)。否则,我们只能猜测可能出了什么问题。Grape绝对支持基于多个路由的参数。
resource 'company' :requirements => { :id => /[0-9]*/, :mid => /[0-9]*/ } do

  get '/:id' do
    # returns company
  end

  get ":id/members" do
    members = Company.find_by_id(params[:id]).members
    present members, :with => Members::MemberResponseEntity
  end

  get ":id/members/:mid" do
    member = Member.find_by_id(params[:mid])
    present member, :with => Members::MemberResponseEntity
  end

end