如果我的模型支持软删除(对于标准用户)和硬删除(对于管理员),哪种最佳路由方法是什么?
使用方法中的逻辑在控制器中的相同删除操作下处理两个请求是否有意义,或者是否有必要使用不同的路由?
技术上是否将软删除视为delete
操作?
我知道这太复杂了,但任何建议都会受到赞赏。
答案 0 :(得分:2)
我可能会在单个操作中添加条件语句。这样,它对用户是透明的,用户无法通过猜测删除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) %>
答案 1 :(得分:0)
除非管理员可能需要执行软删除,否则对两个操作使用相同的路由会减少要处理的路由数。
对两个操作使用DELETE操作都可以。从客户的角度来看,它只是删除一些东西(不需要知道它是软还是硬)。