Sinatra的子路由

有没有办法可以将不同的控制器映射到彼此相关的URL,特别是当一个是另一个的子资源时?

更具体地说,这是一个例子:

  1. 我有两种类型的资源: jobsarticlesjob包含多articles 。 尽管他们有关系,但我想在单独的文件中处理与每个相关的实际代码。 因此,我有:

helpers/job_api.rb

helpers/article_api.rb

他们每个都像这样扩展SinatraBase:

 class ArticleAPI < Sinatra::Base register Sinatra::Async get '/list' do #... end end 

我现在想要的是将所有属于作业的URL请求映射到JobAPI和属于文章的JobAPI (但仍然始终与ArticleAPI的单个作业相关联)。

我的config.ru看起来像这样:

$ LOAD_PATH <<'。' 需要'服务器'

 map "/" do run Sinatra::Application end map "/job" do run JobAPI end map "/job/:job_id/article" do run ArticleAPI end 

但是,当我尝试转到url /job/12/article/list时,这不起作用。

有人知道有没有办法做到这一点?

谢谢

config.ru文件中执行的代码适用于Rack ,它与Sinatra没有相同的路由语法。 意思是这段代码:

 map "/job/:job_id/article" do run ArticleAPI end 

可能不会在config.ru内部工作,因为Rack不处理路径中的参数,就像Sinatra那样。