Ruby on rails 获取没有文件名的URL?

Ruby on rails 获取没有文件名的URL?,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我试图弄清楚如何在Rails中解析URL,并返回除文件名之外的所有内容,或者,除了最后一个反斜杠后面的内容之外的所有内容 例如,我想: http://bucket.s3.amazonaws.com/directoryname/1234/thumbnail.jpg 成为: http://bucket.s3.amazonaws.com/directoryname/1234/ 我已经找到了解析URI的各种方法,但是这个。任何帮助都将不胜感激。文件名 "http://bucket.s3.amazon

我试图弄清楚如何在Rails中解析URL,并返回除文件名之外的所有内容,或者,除了最后一个反斜杠后面的内容之外的所有内容

例如,我想:

http://bucket.s3.amazonaws.com/directoryname/1234/thumbnail.jpg
成为:

http://bucket.s3.amazonaws.com/directoryname/1234/
我已经找到了解析URI的各种方法,但是这个。任何帮助都将不胜感激。

文件名

"http://bucket.s3.amazonaws.com/directoryname/1234/thumbnail.jpg".match(/(.*\/)+(.*$)/)[2]
=> "thumbnail.jpg"
不带文件名的URL

"http://bucket.s3.amazonaws.com/directoryname/1234/thumbnail.jpg".match(/(.*\/)+(.*$)/)[1]
=> "http://bucket.s3.amazonaws.com/directoryname/1234/"

Ruby提供了一些方法,可以让您轻松到达目的地:

File.dirname(URL) # => "http://bucket.s3.amazonaws.com/directoryname/1234"
想想URL/URI是什么:它是协议、站点和资源目录路径的指示符。资源的目录路径与“path/to/file”相同,因此工作良好,无需重新设计特定的轮子

不包括尾随的
/
,因为它是路径段之间的分隔符。您通常不需要这样做,因为将资源连接到路径将自动提供它

实际上,使用Ruby类是破坏URI的正确方法:

require 'uri'

URL = 'http://bucket.s3.amazonaws.com/directoryname/1234/thumbnail.jpg'
uri = URI.parse(URL)
uri.merge('foo.html').to_s 
# => "http://bucket.s3.amazonaws.com/directoryname/1234/foo.html"
也允许您轻松地弄乱路径:

uri.merge('../foo.html').to_s 
# => "http://bucket.s3.amazonaws.com/directoryname/foo.html"

uri.merge('../bar/foo.html').to_s 
# => "http://bucket.s3.amazonaws.com/directoryname/bar/foo.html"

经过良好测试,并为此目的而设计。它还允许您轻松地添加查询参数,并根据需要对其进行编码。

我正在尝试返回url,但在结尾处没有文件名。非常感谢。
uri.merge('../foo.html').to_s 
# => "http://bucket.s3.amazonaws.com/directoryname/foo.html"

uri.merge('../bar/foo.html').to_s 
# => "http://bucket.s3.amazonaws.com/directoryname/bar/foo.html"