gpt4 book ai didi

ruby-on-rails - 删除不存在的资源是否应该在 RESTful Rails 中导致 404?

转载 作者:数据小太阳 更新时间:2023-10-29 06:34:44 25 4
gpt4 key购买 nike

在带有脚手架 RESTful 模型的全新 Rails 应用程序中,生成的删除代码如下所示:

class BeersController < ApplicationController
# DELETE /beers/1
# DELETE /beers/1.xml
def destroy
@beer = Beer.find(params[:id])
@beer.destroy

respond_to do |format|
format.html { redirect_to(beers_url) }
format.xml { head :ok }
end
end
end

如果用户尝试两次删除同一个 Beer(可能是快速双击,或在两个不同的浏览器选项卡中执行操作),他们将收到 RecordNotFound 错误,从而导致 404 页面。这是一种非常不友好的体验;似乎最好完成重定向回 beers_url 无论如何,可能会出现 flash 错误,因为对于第二个用户实际上无能为力删除失败。

另一种方法是像这样删除成功:

def destroy
@beer = Beer.find_by_id(params[:id])
destroyed = @beer.try(:destroy)

respond_to do |format|
format.html { redirect_to(beers_url) }
format.xml { destroyed ? head(:ok) : head(:not_found) }
end
end

我能理解在 API 用例中出现严重 404 错误的愿望,但我更难证明 Web 应用程序的合理性。谁能提供一个很好的理由,说明为什么我们应该以 RESTfulness 的名义向用户抛出一个可怕的错误?

(这个问题不是 Rails 特有的,但我不知道其他框架如何开箱即用地处理这种情况)。

最佳答案

更新:事实证明我错了:https://stackoverflow.com/a/24713946/14731


上一个回答:HTTP DELETE 是一个 idempotent手术。连续多次调用它必须导致与第一次相同的行为。意思是:你不应该返回 HTTP 404

关于ruby-on-rails - 删除不存在的资源是否应该在 RESTful Rails 中导致 404?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6474223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com