我有一个不需要表格的动作。所以它真的只需要一个'编辑'方法而不是RESTful'编辑' - > “更新”。有没有理由不这样做或更好的方式?
def edit
#Do a POST(PUT)
end
答案 0 :(得分:2)
损害在于用户可以轻松导航到该网址并执行可能具有破坏性的操作。
/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
的两个“伪造”版本也不是您可以使用浏览器导航到的操作。
解决方案
解决方案是仅使用update
操作,并且您最初链接到edit
的位置使用以下内容:
button_to "Add new tracker", noform_path, :method => :put
如果存在任何类型的错误,您可能仍需要一个编辑路径来向用户显示,以便他们可以更正某些内容。但是根据你所描述的,一个update
动作应该可以解决问题。
答案 1 :(得分:2)
获取应始终为idempotent - 即他们不应执行任何会改变应用程序,数据库等状态的操作。
正如旁边一样 - 在真正的RESTful形式中,编辑将由HTTP Update操作执行,但是Rails使用表单上的帖子和隐藏值来模拟这一点,因为浏览器没有HTTP更新。
我仍然不清楚为什么你需要没有输入字段的更新。或许更多细节会有所帮助。