lostinthecloud lostinthecloud - 2 months ago 9
Ruby Question

Should exceptions raised due to missing params be rescued?

Should exceptions raised due to missing params be rescued?

For example, in the following code in

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


If the call to update on the model fails, the error message(s) will be stored in
flash
. But if there is something wrong with
params
such that an exception is raised in the
friend_request_params
helper method, the app will fail.

Is it the convention to allow that? Is there a better way to do this?

Answer

In short the answer is no. When you call

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

You have established a contract with any action that uses the friend_request_params. If that action calls friend_request_params and doesn't send a :friend_request, the action has violated the contract and an exception should be raised. Your application is legitimately not working as designed and the exception is your canary in the coal mine so to speak.