[英]Possible to use route helpers to redirect from a Rack app in Rails 3?
我有一個簡單的url縮短器,base 62編碼我的Developer模型的id號並返回這樣的內容作為url:
http://example.com/d/dYbZ
我已經在我的routes.rb
文件中安裝了一個機架應用程序:
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 app實例,如果它是一個真正的中間件,而不僅僅是一個安裝在路由文件中的機架應用程序。 中間件對我沒有意義,因為只有在請求格式為/d/:token
的URL時才需要運行,而不是每次請求都要運行。
我只是想做一個簡單的基本62解碼,然后重定向到解碼的開發者ID(如果它存在,否則重定向到root_url)。 有沒有辦法訪問路由助手(即developer_path
)或更簡單的方法來執行此操作?
使用執行重定向的rails控制器可能更容易。 例如:
路線:
get "/d/:token" => "developers#redirect"
在開發人員控制器中:
def redirect
#magic goes here, use params[:token]
redirect_to some_url
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.