2016-03-11 15 views
1

如何組織控制器層次結構,使得到的東西是這樣的:西納特拉:如何設置命名空間的基類

class ApplicationController < Sinatra::Application 
    set :namespace, '/api' # ??? 
end 

class UsersController < AplicationController 
    namespace '/users' do 
    # /api/users/show 
    get '/show' do 
     # blablabla 
    end 
    end 
end 

class PostsController < ApplicationController 
    namespace '/posts' do 
    # /api/posts/show 
    get '/posts' do 
     # blablabla 
    end 
    end 
end 

我主要用Rails的工作,不知道它有可能在西納特拉做。

回答

1

你只需要改變一個字:

class ApplicationController < Sinatra::Base 

Sinatra Up and Running

路線繼承不僅設置,但西納特拉 類的各個方面將由其子類繼承。這包括定義的 路由,所有錯誤處理程序,擴展,中間件等等。 但最重要的是,它將繼承方法 繼承的方式。如果在 將該類別分類後,您應該爲某個班級定義路線,該路線也將在 子類中提供。

如果您正在尋找HTML路由排序的命名空間,而不僅僅是Ruby排序,那麼請查看包含Sinatra命名空間的Sinatra Contrib

如果你使用Sinatra的命名空間,你可能想改變一個更字:

class PostsController < ApplicationController 
    namespace '/posts' do 
    # /api/posts/show 
    get '/' do # otherwise the route would be /posts/posts 
     # blablabla 
    end 
    end 
end 
+0

我應該怎麼定義的ApplicationController與全局命名空間? –

+0

通過全局名稱空間,你的意思是你在ApplicationController中有一個類似「/ api/v1」的路由,並且從它繼承的所有路由也都將其路由添加了「/ api/v1」? – iain

+0

是的,確切地說。我怎麼能得到它? –