Sinatra的子路由
有没有办法可以将不同的控制器映射到彼此相关的URL,特别是当一个是另一个的子资源时?
更具体地说,这是一个例子:
- 我有两种类型的资源:
jobs
和articles
。job
包含多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那样。