如何从地图中的 OpenURI 中拯救 404

How to rescue 404s from OpenURI in a map

我正在制作地图以适当地格式化一些数据以用于 PDF 导出。其中一部分是使用 OpenURI 打开图像。但是,我遇到的问题是某些图像链接指向外部站点并且已损坏。因此我随机得到 404 错误...

我试过在地图内进行救援,但出现错误。我试过在方法中进行救援,但结果没有数据。这样做的正确方法是什么?

理想情况下,我想将图像设置为服务器上的占位符图像。首先定义一个单独的方法来处理这个会更好吗?

这是我目前的方法:

  def wish_list_item_rows
    WishListItem.where(:wish_list_id => @wish_list.id).map { |wishlistitem| [wishlistitem.product.name, {:image => open(wishlistitem.product.image_url)}] }
  end

您可以在地图块内进行救援(您的语法可能有点偏离),但将救援移至其自己的方法通常会更清晰。将 open 替换为对方法的调用,如

def safe_open(url)
  open(url)
rescue # put a specific error class here ideally
  load_placeholder_image
end

完成代码:

  def safe_open(url)
    if url.blank?
      safe_open = "#{Rails.root}/app/assets/images/placeholder.png"
    else
      open(url)
    end
  rescue OpenURI::HTTPError => e
    if e.message == '404 Not Found'
      safe_open = "#{Rails.root}/app/assets/images/placeholder.png"
    end
  end