Ruby でディレクトリ名を連結して相対パスを得たい時は Pathname より File.join を使った方がよい
Ruby でディレクトリ名を連結したい場合によく使われるクラスに Pathname がある。
require 'pathname' Pathname('a').join('b') # => "a/b" Pathname('a')+'b' # => "a/b" Pathname('a')/'b' # => "a/b"
この Pathname インスタンスは、'/' で始まる文字列を連結すると、絶対パスと解釈し、それまでのパスを無視してしまう。
require 'pathname' Pathname('a').join('/b') # => "/b" Pathname('a')+'/b' # => "/b" Pathname('a')/'/b' # => "/b"
ちなみにリファレンスでは、+ と / の方には 「other が絶対パスなら単に other と同じ内容の Pathname オブジェクトが返されます。」と書かれている (参照) が、 join の方には「与えられたパス名を連結します」程度しか書かれいていない。(参照)
うっかり '/' で始まる文字列を渡して絶対パスになるのを防ぎたい場合は、File.join を使うとよい。
File.join('a','/b').to_s # => "a/b"