我正在解析一个HTML文档,并尝试替换图像src。当我在控制台中尝试它时,它似乎做了我想做的事情,但是在我的模型中,它似乎没有保存它。现在,我不确定我所做的是不是在Rails中保存的方式有问题(我正在尝试更新内容字段并用本地图像替换外部图像),或者它是否使用了nokogiri,但是它没有使用set_attribute方法保存结果
它完美地完成了剩下的部分。
before_save :replace_zemanta_images
def replace_zemanta_images
doc = Nokogiri::HTML(content)
unless doc.css('div.zemanta-img').blank?
doc.css('div.zemanta-img img').each do |img|
io = open(URI.parse(img[:src]))
if photos.find_by_data_remote_url(img[:src]).blank?
photo = photos.build(:data => io, :data_remote_url => img[:src])
img.set_attribute('src', photo.data.url(:original)) #doesn't work!
end
end
end
end发布于 2011-01-17 19:10:57
我假设content是模型上的一个属性。
当您执行img.set_attribute时,您正在更新Nokogiri::XML::Element对象中的属性,但这不会更新content的文本。
在您的方法的末尾,您将需要添加类似以下内容:
self.content = doc.to_s发布于 2016-09-28 05:13:26
JackChance在这里提到过在片段中使用Nokogiri::HTTP::DocumentFragment.parse(content) (如果你不想要DOCTYPE/ HTML /BODY标记),我没有那么幸运,因为我最初的HTML是一个片段,而不是整个文档。
我最终使用了类似这样的东西:html = Nokogiri::HTML.fragment最初将HTML string代码段转换为不带不必要标记的Nokogiri对象。
然后,一旦我们使用了img.set_attribute,我们就可以转换回html.to_s
https://stackoverflow.com/questions/4712278
复制相似问题