2014-12-27 8 views
0

Я хочу группировать маршруты в иерархии. Для этого я создал верхний регулятор уровня, таким образом:Вложенные маршруты в Падрино

MyApp.controllers :group do 
    disable :layout 

    get '/' do 
    {'dummy' => 'value'}.as_json 
    end 
end 

Теперь я хочу, чтобы создать маршруты с :group как родителя, таким образом:

MyApp.controllers :items, :parent => :group do 
    disable :layout 

    get '/', :provides => :json do 
    # get list of items 
    end 
end 

Моя проблема заключается в том, что я могу получить доступ к localhost:port/group (200 OK) из мой клиент REST, но я не могу получить доступ к localhost:port/group/items (404 NOT FOUND).

Все работает красиво, если я удалю опцию :parent. Моя версия падринов 0.10.5.5. Есть идеи?

ответ

3

Способ работы вложенных маршрутов отличается от того, что вы пытаетесь сделать.

Когда вы используете :parent, он ожидает, что родительский ресурс будет определен каким-то образом. Например:

MyApp.controllers :items, :parent => :group do 
    get :index do 
    # returns list of items for a group 
    end 
end 

будет генерировать следующий маршрут:

"/group/#{params[:group_id]}/items" 

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

Вот почему он говорит, что не может найти "/group/items", это не маршрут, который вы создаете с помощью :parent => :group, вы не передаете в Params в :group_id.

Если вы действительно хотите использовать "/group/items" то контроллер элементы должны выглядеть следующим образом:

MyApp.controllers :items do 
    get '/group/items' do 
    # returns list of items 
    end 
end