gpt4 book ai didi

ruby-on-rails - 可以使用路由助手从 Rails 3 中的 Rack 应用程序重定向吗?

转载 作者:行者123 更新时间:2023-12-04 20:16:22 25 4
gpt4 key购买 nike

我有一个简单的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com