如何在地图中从OpenURI中拯救404s

时间:2015-08-12 21:03:40

标签: ruby-on-rails ruby open-uri

我正在制作地图,以便为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

1 个答案:

答案 0 :(得分:2)

您可以在地图块中进行拯救(您可能会稍微关闭语法)但是将救援工作移动到自己的方法通常会更加清晰。通过调用

等方法替换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