私は62をベースにシンプルなURL短縮は、私の開発モデルのID番号を符号化し、URLとしてこのようなものを返します:Rails 3のRackアプリからリダイレクトするためにルートヘルパーを使用できますか?
http://example.com/d/dYbZ
私は以下のようなものを私のroutes.rb
ファイル内のラックアプリを搭載しました:
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
問題がある...明らかに初期化呼び出しがありますルートファイルにマウントされたラックアプリだけでなく、実際のミドルウェアの場合にのみ、レールアプリインスタンスを送信しました。ミドルウェアは、すべてのリクエストではなく、/d/:token
という形式のURLが要求された場合にのみ実行する必要があるため、私には分かりません。
単純なベース62デコードを行い、デコードされたデベロッパーIDにリダイレクトしようとしています(存在する場合は、それ以外の場合はroot_urlにリダイレクトします)。ルートヘルパー(つまり、developer_path
)にアクセスする方法はありますか、これを行うには単により良い方法ですか?
うん、あなたは正しいです。私は、Rackアプリを通してそれをやって少しスピードを上げることを望んでいたが、それはおそらく問題の価値がない。ありがとう。 – markquezada