我有一个ruby-on-rails应用程序,我现在想知道为什么RoR使用Restful Requests: 例如。如果你想删除一个资源,最好的做法是使用这样一个HTTP请求:
DELETE /entry/13
您也可以使用这样的正常请求来执行此操作:
GET /entry/delete/13
或GET /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用户。
答案 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