是否应该挽救由于缺少参数而引起的例外?
例如,在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
辅助方法中出现异常,则应用程序将失败。
是否允许这样的惯例?有更好的方法吗?
答案 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
以更方便的方式实现全部捕获以记录它们。