为什么在rails中创建销毁链接需要默认的javascript文件?

我今天想在Rails中创建一个基本的“destroy”链接,所以我写了这个:

:delete %> 

生成的代码是:

 destroy me 

在我的路线,通常

 resources :companies 

我的摧毁行动在我的控制器里。

但是无论何时我点击链接,我都会被重定向到show动作。 奇怪的。

事实certificate我的布局中没有包含以下行:

  

包含它之后,销毁链接起作用了!

为什么? 为什么我需要包含默认的javascript标记才能使其正常工作?

既然我不想使用原型,我怎么只包含我需要的文件?

从3.0开始,Rails表单助手生成带有HTML5数据属性的干净HTML标签(在您的示例中为数据方法)。 为了支持这些数据属性,原型需要rails.js。 如果你使用jQuery,则需要jQuery版本(https://github.com/rails/jquery-ujs)。

简单地说,rails.js与javascript框架(prototype或jquery)一起做了一些魔术来挂钩标签上的点击和其他事件,其他明智的当你点击链接时,正常点击发生因为没有javascript,链接是正常的链接。

这是因为html的局限性以及锚标签无法使用除GET之外的任何方法提交请求的事实。

如果查看rails.js(将包含在:defaults ),当您单击具有“data-method”的链接时,它会生成并提交一个表单,该表单使用正确的http方法提交到指定的URL中。锚标签。

这是一个解决方法的黑客,但实际上没有任何其他选项可以使普通锚标记提交DELETE请求(或任何其他HTTP动词而不是GET)。

如果您不想使用js,请使用表单(可能使用button_to而不是link_to)来发出请求。 如果您创建自己的帮助程序来构建表单,您可以使用按钮标记(而不是rails构建的输入),这非常容易使样式看起来像普通链接。