Ruby on rails 是否可以使用route helpers从Rails 3中的Rack应用程序重定向?

Ruby on rails 是否可以使用route helpers从Rails 3中的Rack应用程序重定向?,ruby-on-rails,routing,rack,Ruby On Rails,Routing,Rack,我有一个简单的url缩写器,base 62编码我的开发人员模型的id号,并返回如下url: http://example.com/d/dYbZ 我已在我的routes.rb文件中安装了rack应用程序,因此: match '/d/:token' => DeveloperRedirectApp 。。。我的简单机架应用程序如下所示: class DeveloperRedirectApp # no worky: #def initialize(app) # @app = a

我有一个简单的url缩写器,base 62编码我的开发人员模型的id号,并返回如下url:

http://example.com/d/dYbZ
我已在我的
routes.rb
文件中安装了rack应用程序,因此:

  match '/d/:token' => DeveloperRedirectApp
。。。我的简单机架应用程序如下所示:

class DeveloperRedirectApp
  # no worky:
  #def initialize(app)
  #  @app = app
  #end

  def self.call(env)
    request = Rack::Request.new(env)
    token = request.path_info.sub("/d/", "")
    dev_id = token.b(62).to_s(10)
    if dev = Developer.find_by_id(dev_id)
      # developer_path also doesn't work since @app is not defined
      location = @app.developer_path(dev)
    else
      # same here
      location = @app.root_path
    end
    [301, {"Location" => location}, self]
  end  

  def self.each(&block)
  end
end
问题是。。。显然,如果rails应用程序实例是一个实际的中间件,那么初始化调用只会发送给它,而不仅仅是安装在routes文件中的rack应用程序。中间件对我来说没有意义,因为它只需要在请求
/d/:token
格式的url时运行,而不是在每个请求上运行


我只是想做一个简单的Base62解码,然后重定向到解码后的开发者id(如果它存在,则重定向到root\uURL)。有没有一种方法可以访问路由帮助程序(即,
developer\u path
),或者有一种更好的方法可以做到这一点?

使用执行重定向的rails控制器可能更容易做到这一点。例如:

路线:

get "/d/:token" => "developers#redirect"
在开发人员控制器中:

def redirect
  #magic goes here, use params[:token]
  redirect_to some_url
end

是的,你说得对。我希望通过一个Rack应用程序来获得一点速度提升,但这可能不值得麻烦。谢谢