Помощь с массовыми действиями: замена горячих ссылок на изображения на локальные файлы

сценарий:

  • бесплатный хостинг изображений (foo-host в этом примере) прекратил работу, и на форуме discourse сейчас множество изображений, встроенных по прямым ссылкам в постах
  • изображения были вручную сохранены до того, как ссылки перестали работать, и они существуют на локальной файловой системе
  • существует сопоставление между URL изображения и локальным путем к файлу: get_paths_from_hotlinked_urls()

как мне:

  1. создать вложение в rails для каждого из этих изображений и
  2. корректно добавить их в пост?
image_host_domain = 'foo-host.com'

hotlink_posts = Post.where('cooked ~ ?', image_host_domain)
puts "найдено #{hotlink_posts.length} постов с изображениями по прямым ссылкам..."

hotlink_posts.each do |p|
  # получить все URL в посте, содержащие image_host_domain
  urls = URI.extract(p.cooked).select { |url| url[/#{Regexp.quote(image_host_domain)}/] }

  local_paths = get_paths_from_hotlinked_urls(urls)

  new_raw = p.raw
  urls.each.with_index do |url, i|
    next if local_paths[i].blank?

    # ***** TODO: 1) 'загрузить' local_paths[i] как вложение
    #                и корректно связать его с постом

    # ***** TODO: 2) заменить прямую ссылку на вложение
    # new_raw = new_raw...
  end

  p.update(raw: new_raw)
end

извините за пост с минимальными усилиями. просто сегодня немного нервничаю, lol

не могли бы вы указать мне правильное направление? полное решение не требуется, если это слишком хлопотно. спасибо

Вы можете посмотреть скрипты импорта, чтобы узнать, как загружать файлы и вставлять HTML для этих загрузок.