我现在已经和它斗争了好几个小时了。我有一个控制器动作,我想渲染一个页面,然后自动引发一个异常。我无法找到有关这方面的更多信息,这让我觉得我在寻找错误的东西。
以下是可能的吗?
class UsersController < ActionController::Base
def new
# .. do stuff
begin
UserMailer::send_confirmation_link(@user)
rescue StandardError => e
render 'email_error'
raise(e)
end
# .. other stuff
end
end
在这种情况下,我只想告知最终用户错误,然后在应用程序本身上引发异常。请注意,我无法更改事实上的错误页面,因为这是一个较小的应用程序,在相同的代码库中有更大的应用程序。
答案 0 :(得分:2)
不,你要么渲染也要引发异常,而不是两者。
Rails确实提供500.html
中的静态public
页面,这是默认情况下为异常呈现的内容,您可以自定义用户在那里查看所有例外的消息。
还有rescue_from
方法可以用来自定义特定异常类的响应,这是一个很好的方法来获得一个中心点(通常在ApplicationController
中),其中异常响应是所有位于。
如果您使用您的用例,您可能需要自己的自定义异常类,即RuntimeError
的子类,您可以将此异常包装为重新引发,例如:
rescue StandardError => e
raise EmailConfirmationError.new e.message
end
...然后在ApplicationController
:
rescue_from EmailConfirmationError { |e| render "email_error" }