簡體   English   中英

可以使用路由助手從Rails 3中的Rack應用程序重定向?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM