44

Let's say I know the absolute path that I am starting from and the absolute path that I am trying to get to:

first = '/first/path'
second = '/second/path'

Now I want to figure out how to construct a path that is relative to the first. For example:

# answer should be /first/path/../../second/path
path = second.get_path_relative_to(first)

How can I do this sort of thing in Ruby?

Andrew
  • 227,796
  • 193
  • 515
  • 708

1 Answers1

73

Use Pathname#relative_path_from:

require 'pathname'

first = Pathname.new '/first/path'
second = Pathname.new '/second/path'

relative = second.relative_path_from first
# ../../second/path

first + relative
# /second/path
Matheus Moreira
  • 17,106
  • 3
  • 68
  • 107