是否应该挽救由于缺少参数而引起的例外情况?

时间:2016-07-06 22:16:33

标签: ruby-on-rails ruby exception parameters rescue

是否应该挽救由于缺少参数而引起的例外?

例如,在FriendRequestsController中的以下代码中:

def update
  @request = FriendRequest.find(params[:id])

  if @request.update(friend_request_params)
    flash[:notice] = "Friend request updated successfully."
    redirect_to current_user
  else
    flash[:errors] = @request.errors.full_messages
    redirect_to current_user
  end
end

private
  def friend_request_params
    params.require(:friend_request).permit(:status)
  end

如果对模型的更新调用失败,则错误消息将存储在flash中。但是如果params出现问题,导致friend_request_params辅助方法中出现异常,则应用程序将失败。

是否允许这样的惯例?有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

简而言之,答案是否定的。当你打电话

  def friend_request_params
    params.require(:friend_request).permit(:status)
  end

您已与使用friend_request_params的任何操作建立合约。如果该操作调用friend_request_params并且未发送:friend_request,则该操作违反了合同并应引发异常。你的申请合法地不按设计工作,可以说是煤矿中的金丝雀例外。

答案 1 :(得分:1)

不,他们不应该。如果你的参数发生异常,那是因为发生了一些奇怪或不期望的事情。它可能是一个错误,也可能是某人弄乱了表单。如果friend_request_params引发异常,只需向您的用户展示一个不错的网页,例如public / 500.html或public / 400.html。

您可以查看日志以跟踪异常,或使用rescue_from以更方便的方式实现全部捕获以记录它们。