2

我有一系列 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:require './application'

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

我遇到的问题是,当我尝试在操作中执行重定向时,zoom我被发送到索引操作Foo而不是Zoo. 有没有一种干净的方法来做到这一点,这样我的应用程序就不需要知道如何为应用程序设置路由?

4

1 回答 1

3

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

例如

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
    ...
于 2013-02-12T12:55:37.373 回答