6

エンドポイントとパス、またはホストとパスを使用して URL を作成したいと考えています。残念ながらURI.join、それを行うことはできません:

pry(main)> URI.join "https://service.com", "endpoint",  "/path"
=> #<URI::HTTPS:0xa947f14 URL:https://service.com/path>
pry(main)> URI.join "https://service.com/endpoint",  "/path"
=> #<URI::HTTPS:0xabba56c URL:https://service.com/path>

そして、私が欲しいのは: "https://service.com/endpoint/path". Ruby/Railsでどうすればできますか?

編集:いくつかの欠点があるためURI.join、使用したくなりますFile.join:

URI.join("https://service.com", File.join("endpoint",  "/path"))

どう思いますか?

4

3 に答える 3

9

URI.join は、<a>タグが機能することを期待するように機能します。

あなたはexample.com, endpoint,に参加し/pathているので/path、ドメインを追加するのではなく、ドメインのルートに戻ります。

エンドポイントを で終了する必要があり/、パスを で開始する必要はありません/

URI.join "https://service.com/", "endpoint/",  "path"
=> #<URI::HTTPS:0x007f8a5b0736d0 URL:https://service.com/endpoint/path>

編集:以下のコメントのリクエストに従って、これを試してください:

def join(*args)
  args.map { |arg| arg.gsub(%r{^/*(.*?)/*$}, '\1') }.join("/")
end

テスト:

> join "https://service.com/", "endpoint", "path"
=> "https://service.com/endpoint/path"
> join "http://example.com//////", "///////a/////////", "b", "c"
=> "http://example.com/a/b/c"
于 2013-02-26T13:50:01.273 に答える