RESTful请求的意义

时间:2010-08-23 23:09:27

标签: ruby-on-rails http rest

我有一个ruby-on-rails应用程序,我现在想知道为什么RoR使用Restful Requests: 例如。如果你想删除一个资源,最好的做法是使用这样一个HTTP请求:

DELETE /entry/13

您也可以使用这样的正常请求来执行此操作: GET /entry/delete/13GET /entry/13/delete

现在我的问题: 当我使用link_to helper

链接到这样一个宁静的删除操作时
link_to :controller =>:delete, :id => id, :method => :delete

导致一些神秘的javascript:

<a href="/entry/13" onclick="var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var m = document.createElement('input'); m.setAttribute('type', 'hidden'); m.setAttribute('name', '_method'); m.setAttribute('value', 'delete'); f.appendChild(m);var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', 'GIep/wk5+6EMX23qY4TAP7joKy/G3f5uvMI6d6n9vlA='); f.appendChild(s);f.submit();return false;">Delete</a>

那背后的想法是什么? 在我看来,你只是排除非JavaScript用户。

1 个答案:

答案 0 :(得分:0)

所有版本的Rails&lt; 3使用非常突兀的javascript(结果非常难看,正如你所展示的那样)。

文档suggests如果禁用了javascript,该方法将回退到使用GET:

  

:method =&gt; HTTP动词的符号 - 这个   修饰符将动态创建   HTML表单并立即提交   使用HTTP进行处理的表单   动词指定。有用的   链接执行POST操作   删除等危险行为   记录(搜索机器人可以跟随   同时抓住你的网站)。支持的   动词是:post,:delete和:put。   请注意,如果用户有JavaScript   禁用,请求将退回   使用GET。如果你依赖   POST行为,你应该检查   在你的控制器的行动中   使用请求对象的方法   发帖?,删除?还是放了?。

不管怎样,我建议你像这样创建“破坏”链接:

# when you have an "entry" object
link_to "Destroy", entry, :method => :delete

# when you only have an "entry" object's id
link_to "Destroy", entry_path(:id => id), :method => :delete