如何在Sinatra模块化应用程序中从模块路径重定向到根应用程序路径?

时间:2012-11-10 16:46:39

标签: ruby module sinatra

我有Sinatra基础应用程序,如:

class MyApp < Sinatra::Base
  get '/' do
    ..
  end
  get '/login' do
    ..
  end
end

和一些子模块如

class Protected < MyApp

  before '/*' do
    redirect('/login') unless logged_in
  end

  get '/list' do
    ...
  end
end

我的config.ru如下所示

map "/" do
  run MyApp
end

map "/protected" do
  run Protected
end

我在尝试访问/protected/list时遇到重定向循环,因为它尝试从主应用程序重定向到 / protected / login 而不是 / login 。 我怎么能强迫它做正确的重定向?我知道我可以使用redirect to('../login'),但看起来很糟糕。

2 个答案:

答案 0 :(得分:2)

imo与Sinatra你只能将URL分配给常量然后引用它们。

像:

MAIN_URL = '/'
PROTECTED_URL = '/protected'

class Protected < MyApp

before '/*' do
  redirect( MAIN_URL + 'login') unless logged_in
end

get '/list' do
  ...
end

map MAIN_URL do
  run MyApp
end

map PROTECTED_URL do
  run Protected
end

丑陋。

我建议改用Espresso

在路由以及其他框架很糟糕的其他方面非常明智。

路由部分位于:http://e.github.com/Routing.html

答案 1 :(得分:0)

来自/config/application.rb中的一个应用

android:name=".MainActivity"

您也可以在config.ru中定义该常量,就像在第一个答案中一样。