Sinatra:如何为基类设置名称空间

时间:2016-03-11 11:03:28

标签: ruby sinatra

如何组织控制器层次结构,以便得到如下内容:

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,并且不知道在Sinatra可以做到这一点。

1 个答案:

答案 0 :(得分:1)

你只需要改变一个词:

class ApplicationController < Sinatra::Base

来自Sinatra Up and Running

  

路由继承不仅是设置,还包括Sinatra的每个方面   class将由其子类继承。这包括定义   路由,所有错误处理程序,扩展,中间件等。   但最重要的是,它将以方法的方式继承   遗传。如果你应该在有一个类之后定义一个路由   子类化,该路线也将在   子类。

如果您正在寻找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