如何从地图中的 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
我正在制作地图以适当地格式化一些数据以用于 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