在Ruby on Rails中指定图像源的完整路径

时间:2013-05-13 14:58:09

标签: ruby-on-rails ruby ruby-on-rails-3 html-parsing

我有包含图片代码的HTML文档。我需要挑选每个图像标记的源属性并指定一个完整路径而不是已经存在的相对路径。那就是追加绝对路径。

当前版本:

<img src = '/assets/rails.png' />

转型后:

<img src = 'http://localhost:3000/assets/rails.png' />

在RoR中执行此操作的最简洁,最有效的方法是什么?

加成

我将使用转换的HTML作为字符串并将其传递给IMgKit gem以转换为图像。

2 个答案:

答案 0 :(得分:3)

很难弄清楚你是否有HTML模板,例如HAML或ERB,或者真正的HTML文件。如果您正在尝试操作HTML文件,则应使用Nokogiri解析并更改src参数:

require 'nokogiri'
require 'uri'

html = '<html><body><img src="/path/to/image1.jpg"><img src="/path/to/image2.jpg"></body></html>'
doc = Nokogiri.HTML(html)

doc.search('img[src]').each do |img|
  img['src'] = URI.join('http://localhost:3000', img['src']).to_s
end

puts doc.to_html

哪个输出:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
<img src="http://localhost:3000/path/to/image1.jpg"><img src="http://localhost:3000/path/to/image2.jpg">
</body></html>

您可以通过各种方式操作src参数,但使用URI的优势在于,它知道URL需要遵循的各种曲折。使用gsub或文本操作重写参数需要您注意所有这些,并且,意外的编码问题可能会蔓延。

答案 1 :(得分:0)

您可以创建一个帮助方法,以便随处使用

def full_image_path(image)
  request.protocol + request.host_with_port + image.url
end