Что я должен делать при уничтожении записи?
У меня есть API, который позволяет уничтожать объект. Часть, на которую я не уверен, - это то, что JSON следует сделать после того, как запись была уничтожена. Вот несколько вариантов, но я не уверен, что для этого лучше всего.
Версия 1:
Возвращает пустой объект со статусом 204
def destroy
item = current_user.current_cart.items.find(params[:id])
item.destroy
render json: {}, status: :no_content
end
Версия 2:
Возвращаемый элемент, даже если он был уничтожен
def destroy
item = current_user.current_cart.items.find(params[:id])
item.destroy
render json: item
end
Один из них предпочтительнее другого? Есть ли версия, о которой я не думал, что может быть предпочтительнее?
Ответы
Ответ 1
Для запроса удаления код статуса http 200 или 204 подразумевает успешное удаление ресурсов.
9.7 УДАЛИТЬ
Успешный ответ ДОЛЖЕН быть 200 (ОК), если ответ включает объект, описывающий статус, 202 (Принято), если действие еще не было принято, или 204 (Нет содержимого), если действие было принято, но ответ не включает объект.
Таким образом, вы можете либо вернуть объект с кодом состояния 200, либо получить пустой код с кодом состояния
Ответ 2
Соответственно должен быть статус успеха 204 (без содержимого).
Как подразумевается в 204, не должно быть тела ответа, которое может быть достигнуто с помощью render :nothing, status: :no_content
или немного более запоминающимся:
def destroy
item.destroy
head :no_content
end
Изменить: render :nothing
устарел и удален с Rails 5.1. Вместо этого вы можете использовать render body: nil, status: :no_content
.