2013-02-25 55 views
0

有沒有辦法將不同的控制器映射到彼此相關的url,特別是當其中一個是另一個的子資源時?Sinatra中的子路由

更具體地講,這裏有一個例子:

  1. 我有2種類型的資源:jobsarticles。 A 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和那些屬於物品(但仍然與單個作業在任何時間都與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不起作用 ''。

任何人都知道是否有辦法做到這一點?

感謝

回答

0

config.ru文件執行的代碼是Rack這確實具有相同的路由語法Sinatra一樣。這意味着該代碼:

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

可能不會在config.ru內工作,因爲機架不會在路徑處理參數,順便西納特拉一樣。