2014-01-17 4 views
2

Как вы получаете несколько параметров маршрута в Винограде для работы в винограде?Несколько маршрутов в винограде

я могу сделать этот маршрут работы:

.../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 
+1

Не могли бы вы добавить ошибки, которые попадают на этот вопрос? Кроме того, код, который производит эти ошибки (при условии, что вы пробовали несколько вариантов). В противном случае мы оставляем догадываться, что может быть неправильным. Grape определенно поддерживает несколько параметров на основе маршрута. –

ответ

8
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 


     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 
    end 
    end 
end 

Вы можете сделать это таким образом. Или вы можете создать два разных файла ресурсов и установить членов в компанию. Как так:

# 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 

Надежда, что помогает

1

Другой способ сделать это использует регулярное выражение для проверки идентификаторов.

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 
Смежные вопросы