みんなのちからになりたい

コピペでブログラムつくっていきたい

URI.joinするときケツのスラッシュを付けたり付けなかったりしたときで値が違う

"http://aaa.com/bbb"と"ccc/ddd"をjoinさせて"http://aaa.com/bbb/ccc/ddd"を作ろうと思ったらケツにスラッシュ付けないと"http://aaa.com/ccc/ddd"になったのでなんでかなと。

[2] pry(main)> require "uri"
=> true
[3] pry(main)> URI.join("http://www.ruby-lang.org", "dee")
=> #<URI::HTTP:0x105c900 URL:http://www.ruby-lang.org/dee>
[4] pry(main)> URI.join("http://www.ruby-lang.org/aaa", "dee")
=> #<URI::HTTP:0xf95238 URL:http://www.ruby-lang.org/dee>
[5] pry(main)> URI.join("http://www.ruby-lang.org/aaa/", "dee")
=> #<URI::HTTP:0x1331b68 URL:http://www.ruby-lang.org/aaa/dee>
[6] pry(main)> URI.join("http://www.ruby-lang.org/aaa/", "/dee")
=> #<URI::HTTP:0x10cc530 URL:http://www.ruby-lang.org/dee>
[7] pry(main)> URI.join("http://www.ruby-lang.org/aaa", "/dee")
=> #<URI::HTTP:0x137caa8 URL:http://www.ruby-lang.org/dee>

ちなみにparseはどうかというと

[12] pry(main)> a = URI.parse("http://www.ruby-lang.org")
=> #<URI::HTTP:0x1386fa8 URL:http://www.ruby-lang.org>
[13] pry(main)> a.path
=> ""
[14] pry(main)> a = URI.parse("http://www.ruby-lang.org/")
=> #<URI::HTTP:0x102c5a0 URL:http://www.ruby-lang.org/>
[15] pry(main)> a.path
=> "/"
[16] pry(main)> a = URI.parse("http://www.ruby-lang.org/aaaa")
=> #<URI::HTTP:0xc41490 URL:http://www.ruby-lang.org/aaaa>
[17] pry(main)> a.path
=> "/aaaa"
[18] pry(main)> a = URI.parse("http://www.ruby-lang.org/aaaa/")
=> #<URI::HTTP:0x1056c30 URL:http://www.ruby-lang.org/aaaa/>
[19] pry(main)> a.path
=> "/aaaa/"

ドキュメントみると
http://doc.ruby-lang.org/ja/1.9.3/class/URI.html

文字列 uri_str と path ... を URI として連結して得られる URI オブジェクトを返します。
[RFC2396] の Section 5.2 の 仕様に従って連結します。 以下と等価です

って書いてあるのでそういうことなんだろうけど、実際使うとなると迷うってうかぼくみたいな初心者ははまる気がする。