如何为Sinatra应用程序设置范围重定向

时间:2013-02-11 12:47:53

标签: ruby sinatra rack

我有一系列sinatra应用程序设置,每个应用程序负责一件事。

假设我有两个这样的应用程序:

class Foo < Sinatra::Base
    get '/' do
      'FOO!'
    end
end

class Zoo < Sinatra::Base
    get '/' do
      'ZOO!'
    end

    get '/zoom' do
      # do things
      redirect '/'
    end
end

现在让我说我有我的config.ru: 要求'./application'

run Rack::URLMap.new('/' => Foo.new, '/zoo' => Zoo.new)

我遇到的问题是,当我尝试在zoom操作中执行重定向时,我会将其发送到Foo而不是Zoo的索引操作。有没有一种干净的方法来执行此操作,以便我的应用程序不需要知道如何为应用程序设置路由?

1 个答案:

答案 0 :(得分:3)

您可以使用可配置的重定向。请参阅http://www.sinatrarb.com/2011/03/03/sinatra-1.2.0.html#configurable_redirects

E.g。

class Zoo < Sinatra::Base
    get '/' do
      'ZOO!'
    end

    get '/zoom' do
      # do things
      redirect to('/')
    end
end

或者,如上面链接中所述,通过在Zoo应用程序中启用带前缀的重定向来跳过to()调用:

class Zoo < Sinatra::Base
    enable :prefixed_redirects
    ...