在Ruby中评估另一个上下文中的潜在相对URI

pup*_*eno 5 ruby url uri

我在Ruby程序中有两个URI.一个肯定是绝对URI而另一个可能是绝对的或相对的.我想在第一个上下文的绝对URI中转第二个,所以如果第一个是http://pupeno.com/blog而第二个是/ about,结果应该是http:/ /pupeno.com/about.有什么想法怎么做?

the*_*Man 11

Ruby的内置URI和Addressable gem都可以做到这一点.我更喜欢Addressable,因为它功能更全,但URI是内置的.

require 'uri'

URI.join('http://pupeno.com/blog', '/about') # => #<URI::HTTP:0x00000101098538 URL:http://pupeno.com/about>
Run Code Online (Sandbox Code Playgroud)

要么

require 'addressable/uri'

uri = Addressable::URI.parse('http://pupeno.com/blog')
uri.join('/about') # => #<Addressable::URI:0x806704a0 URI:http://pupeno.com/about>
Run Code Online (Sandbox Code Playgroud)

使用join提供的方法是个好主意,因为它们会进行一些健全性检查以确保返回的地址是正确的.如果您有相对URL并直接替换旧路径,则直接分配到路径可能会破坏事物.join将考虑到这一点,并将取代或合并,以适当的方式.