Sinatra中的子路由

时间:2013-02-25 21:39:35

标签: ruby routing sinatra

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

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

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

    helpers/article_api.rb

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

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

    我现在想要的是将仅属于作业的所有网址请求映射到JobAPI以及属于文章的网址请求(但仍然始终与{1}的单个作业相关联}。

    我的ArticleAPI看起来像这样:

    $ LOAD_PATH&lt;&lt; ''     要求'服务器'

    config.ru

    但是当我尝试转到网址map "/" do run Sinatra::Application end map "/job" do run JobAPI end map "/job/:job_id/article" do run ArticleAPI end 时,这不起作用。

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

    由于

1 个答案:

答案 0 :(得分:0)

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

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

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