Я разбираю HTML-документ и пытаюсь заменить изображение src. Кажется, что я делаю то, что хочу, когда пытаюсь использовать его в консоли, но в моей модели он, похоже, не сохраняет его. Теперь я не уверен, что то, что я делаю, неверно в способе сохранения в Rails (я пытаюсь обновить поле содержимого и заменить внешние изображения на локальные) или если он использует nokogiri, но он не сохраняет результат с использованием метода set_attribute
nokogiri replace
Он делает все остальное прекрасно.
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
совершенен, я знал, что я с видом что-то! Спасибо – holden
Я также заметил, что Nokogiri, похоже, бросает и тег тела ... независимо от того, был он там или нет. Любая идея, как предотвратить это от этого? – holden
Есть часто небольшие различия между HTML, который вы подаете в Nokogiri, и HTML, который вы выходите, выполняя 'doc.to_s'. Это следствие того, что он проходит через парсер, и насколько я знаю, нет способа избежать этого. – mikej