如果我有一个支持软删除(标准用户)和硬删除(对于管理员)的模型,那么最好的路由方法是什么?
在控制器中用方法中的逻辑处理两个请求在相同的delete操作下是否有意义,还是必须对不同的路由有意义?
从技术上讲,软删除是否被视为一种delete
操作?
我知道这件事太复杂了,但任何建议都将不胜感激。
发布于 2013-10-01 22:29:39
我可能会在一个动作中加入一个条件语句。这样,它对用户是透明的,用户也不可能通过猜测删除URL并将其发送到删除URL来破解破坏方法:
# 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) %>
发布于 2013-10-01 22:35:11
除非管理员可能需要执行软删除,否则对这两个操作使用相同的路由可以减少要处理的路由数。
对这两个操作都使用DELETE操作是可以的。从客户端的角度来看,它只是删除一些东西(不需要知道它是软的还是硬的)。
https://stackoverflow.com/questions/19126902
复制相似问题