作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个简单的 url 缩短器,它以 62 为基数对我的 Developer 模型的 ID 编号进行编码并返回类似这样的内容作为 url:
http://example.com/d/dYbZ
我在我的 routes.rb
文件中安装了一个 Rack 应用程序:
match '/d/:token' => DeveloperRedirectApp
...我的简单 Rack 应用程序如下所示:
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 应用程序实例,而不仅仅是安装在路由文件中的 Rack 应用程序。中间件对我来说没有意义,因为它只需要在请求格式为 /d/:token
的 url 时运行,而不是在每次请求时都运行。
我只是想做一个简单的 base 62 解码,然后重定向到解码后的开发者 ID(如果它存在,则重定向到 root_url 否则)。有没有一种方法可以访问路由帮助程序(即 developer_path
)或更好的方法?
最佳答案
使用执行重定向的 Rails Controller 可能更容易做到这一点。例如:
路线:
get "/d/:token" => "developers#redirect"
在开发者 Controller 中:
def redirect
#magic goes here, use params[:token]
redirect_to some_url
end
关于ruby-on-rails - 可以使用路由助手从 Rails 3 中的 Rack 应用程序重定向吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4553180/
我是一名优秀的程序员,十分优秀!