Rescue_from不起作用

时间:2017-07-18 11:03:48

标签: ruby-on-rails controller rescue

我正在尝试处理路由错误,因为我正在加载图片而某些图片丢失了。

您知道我只想用默认图片图标替换丢失的图片并禁止显示错误消息。

所以我试过

class ImagesController < ApplicationController
       [...]

       def index
         images = Image.all
         rescue_from ActionController::RoutingError, with: :image_route_error
       end

      [...]
 end

然后我明白了:

NoMethodError (undefined method `rescue_from' for #<ImagesController:0x007fe382227e38>
Did you mean?  rescue_handlers):

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您可以使用rescue_from方法 rescue_from 除服务器错误以外的任何类型的例外。您可以在ApplicationController

中编写此方法
rescue_from ActionController::RoutingError do |exception|
    if controller_name == "image" && action_name == "index"
           render 'default_image_here', status: 200 
    else
     render plain: 'Not found', status: 400 
   end
end

render 'default_image_here'中你可以使用:

render :text => open(image_url, "rb").read, status: 200

这会将文件读取为二进制而不是文本。