如果我有一个支持软删除(标准用户)和硬删除(管理员)的模型,最好的路由方法是什么?
使用方法中的逻辑在控制器中的相同删除操作下处理两个请求是否有意义,或者必须使用不同的路由是否有意义?
软删除在技术上是否被视为一种delete
操作?
我知道这太复杂了,但任何建议都将不胜感激。
如果我有一个支持软删除(标准用户)和硬删除(管理员)的模型,最好的路由方法是什么?
使用方法中的逻辑在控制器中的相同删除操作下处理两个请求是否有意义,或者必须使用不同的路由是否有意义?
软删除在技术上是否被视为一种delete
操作?
我知道这太复杂了,但任何建议都将不胜感激。
我可能会在单个操作中放置一个条件语句。这样它对用户是透明的,用户无法通过猜测删除 URL 并发布到它来破解 destroy 方法:
# DELETE /thing/1
# DELETE /thing/1.json
def destroy
@thing = Thing.find(params[:id])
if current_user.admin? and !params[:soft_delete]
@thing.destroy
else
@thing.soft_delete
end
respond_to do |format|
format.html { redirect_to things_url }
format.json { head :no_content }
end
end
# views/things/show.html.erb
<%= button_to("Delete", thing_url(@thing), method: :delete) %>
<%= button_to("Soft Delete", thing_url(@thing, soft_delete: true), method: :delete) %>
除非管理员可能需要执行软删除,否则对两个操作使用相同的路由会减少要处理的路由数量。
对这两个操作都使用 DELETE 操作是可以的。从客户端的角度来看,它只是删除了一些东西(不需要知道它是软的还是硬的)。