Ruby on rails 是否可以使用route helpers从Rails 3中的Rack应用程序重定向?
我有一个简单的url缩写器,base 62编码我的开发人员模型的id号,并返回如下url: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
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应用程序来获得一点速度提升,但这可能不值得麻烦。谢谢