gpt4 book ai didi

ruby-on-rails - 在 Rails Controller 的 before_action 中捕获所有异常

转载 作者:行者123 更新时间:2023-12-03 16:02:33 25 4
gpt4 key购买 nike

专辑 Controller .rb:

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

我想捕捉 Album.find() 的异常.根据 this 我补充说:
  rescue_from Exception, with: :flash_error

# private
def flash_error
flash_message :error, 'Something went wrong..' # _FLASH_
end

我将上面的一些部分标记为 _FIND_ , _FLASH_ , _DEST_我想按顺序浏览所有这些。我试图删除不存在的专辑来触发它。我得到了带有专辑 URL 的空白页面/(:id)(我试图删除的那个),所以我想我停留在 _FLASH_部分。

我该怎么做才能调用 destroy Action (我的意思是原来的一个叫做rescue_form,因为它也可以捕获其他 Controller Action 的其他异常)。以及如何获得比 Something went wrong 更好的消息?

主要目标是重定向到正确的页面(在 _DEST_ 中指定),所以也许有更好的方法。

最佳答案

“rescue_from”回调方法“flash_error”的行为就像一个正常的 Controller 操作,从用户的角度来看,它最终会呈现空白页面。从这个意义上说,它并没有被困在那里,而是在那里完成。

为了“继续”,您需要重定向或渲染。请注意,异常会被传播,因此您可以获得有关所发生情况的更多详细信息:

 #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

我的建议是永远不要捕获所有异常。以我的经验,除了悲伤之外,什么也没有。想象一下,如果您在索引操作中有异常——那将最终进入一个循环。

关于ruby-on-rails - 在 Rails Controller 的 before_action 中捕获所有异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22940195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com