帕德里诺的嵌套路线

时间:2014-12-27 05:16:01

标签: ruby routes padrino

我想将路由分组到层次结构中。为此我创建了一个顶级控制器:

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

我的问题是我可以从我的REST客户端访问localhost:port/group200 OK),但我无法访问localhost:port/group/items404 NOT FOUND)。

如果删除:parent选项,一切都会很好用。我的padrino版本0.10.5.5。有什么想法吗?

1 个答案:

答案 0 :(得分: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创建的路线,你没有在参数中传递:group_id

如果您真的想使用"/group/items",那么您的项目控制器应如下所示:

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