我有一个不需要表单的操作。所以它实际上只需要一个“编辑”方法,而不是 RESTful 的“编辑”-->“更新”。有什么理由不这样做或者有更好的方法吗?
def edit
#Do a POST(PUT)
end
最佳答案
危害在于用户可以轻松导航到该 URL 并执行潜在的破坏性操作。
/noform/edit #URL typed by user => Action Performed
/noform/update #URL typed by user => Error is thrown, No Action Performed
正常的浏览体验会向服务器生成 GET
请求。假设是,您可以轻松导航到(或在地址栏中输入)的任何页面都不会执行任何数据更改功能。
通过表单提交或 AJAX 请求生成的 POST
请求期望得到服务器上数据更改的结果。
类似地,PUT
和 DELETE
的两个 Rails“伪造”版本也不是您可以简单地使用浏览器导航到的操作。
解决方案
解决方案是仅使用 update
操作,并且您最初链接到 edit
的位置使用如下所示的内容:
button_to "Add new tracker", noform_path, :method => :put
如果存在任何类型的错误,您可能仍然需要一个编辑路径来向用户显示,以便他们可以更正某些内容。但根据您的描述,单个 update
操作应该可以解决问题。
关于ruby-on-rails - 对 PUT 使用典型的 GET 操作有什么坏处吗? (平静地说),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2170125/