Catch all exceptions in rails controller's before_action
albums_controller.rb:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | lass AlbumsController < ApplicationController before_action :set_album, only: [:show, :edit, :update, :destroy] def destroy if @album.destroy redirect_to albums_url, notice: 'Album was successfully destroyed.' else redirect_to albums_url, error: 'Album destroy failed.' # _DEST_ end end private def set_album @album = Album.find(params[:id]) # _FIND_ end end |
我想为
1 2 3 4 5 6 | rescue_from Exception, with: :flash_error # private def flash_error flash_message :error, 'Something went wrong..' # _FLASH_ end |
我在上面标记了一些部分为
我应该怎么做才能调用
主要目标是重定向到正确的页面(在
"rescue_from"回调方法"flash_error"的行为类似于从用户角度最终呈现空白页面的普通控制器操作。 从那个意义上讲,它并没有停留在那里,而是在那里完成。
为了"继续",您需要重定向或渲染。 请注意,异常会被传播,因此您可以获得有关发生的更多详细信息:
1 2 3 4 5 | #I am using Rails 3.2 flash notation def flash_error(exception) flash[:error] ="#{exception.message} (Something went wrong..)" # _FLASH_ redirect_to albums_url end |
我的建议是永远不要抓住所有例外。 根据我的经验,除了悲伤之外什么都没有。 想象一下,如果你在索引动作中有异常 - 那将最终成为一个循环。