2016-07-06 41 views
0

Должны быть спасены исключения из-за недостающих параметров?Должны ли быть спасены исключения из-за недостающих параметров?

Например, в следующем коде в 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 

Если вызов для обновления на модель не удалась, сообщение (s) ошибка будет храниться в flash. Но если что-то не так с params, что исключение возникает в вспомогательном методе friend_request_params, приложение завершится с ошибкой.

Согласны ли это с этим? Есть лучший способ сделать это?

ответ

1

Короче говоря, нет. Когда вы звоните

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

Вы установили договор с любым действием, которое использует friend_request_params. Если это действие вызывает friend_request_params и не отправляет :friend_request, действие нарушило договор, и исключение должно быть поднято. Ваша заявка законно не работает так, как она была разработана, и исключение - ваша канарейка в угольной шахте, так сказать.

1

Нет, они не должны. Если с вашими параметрами происходит исключение, это происходит из-за чего-то странного или не ожидаемого. Это может быть ошибка, или это может быть кто-то возиться с формой. Если friend_request_params создает исключение, просто покажите хорошую веб-страницу своим пользователям, например public/500.html или public/400.html.

Вы можете посмотреть свои журналы, чтобы отслеживать исключения, или реализовать catch, чтобы вести их более удобным способом, используя rescue_from.

+0

Большое спасибо за ваш ответ. Я выбираю другой ответ, потому что я думал, что он немного лучше сформулирован. – lostinthecloud