我学习了Rails并且用HTML知道:
<a rel="nofollow" data-method="delete" href="/logout">Log out</a>
... Rails可以接收“删除”方法。现在我以这种方式使用node和express,但Web服务器接收“Get”方法。
rails如何支持 data-method =“delete”,以及如何明确支持它?
答案 0 :(得分:2)
它使用rails工作,因为Rails添加了一个js文件,该文件捕获具有此类属性的链接上的事件,然后使用改编的动词触发相应的请求。
我猜你可以拿这个js文件,只是确保你有jQuery并且它不会干扰你自己的脚本。
此外,Rails包含一个中间件,它检查_method
参数并根据它更改http动词。
使用method-override和app.use(methodOverride('_method'))
答案 1 :(得分:1)
这是在JQuery中处理的,它使用的具体功能就是这个 -
// Handles "data-method" on links such as:
// <a href="/users/5" data-method="delete" rel="nofollow" data-confirm="Are you sure?">Delete</a>
handleMethod: function(link) {
var href = rails.href(link),
method = link.data('method'),
target = link.attr('target'),
csrfToken = $('meta[name=csrf-token]').attr('content'),
csrfParam = $('meta[name=csrf-param]').attr('content'),
form = $('<form method="post" action="' + href + '"></form>'),
metadataInput = '<input name="_method" value="' + method + '" type="hidden" />';
if (csrfParam !== undefined && csrfToken !== undefined) {
metadataInput += '<input name="' + csrfParam + '" value="' + csrfToken + '" type="hidden" />';
}
if (target) { form.attr('target', target); }
form.hide().append(metadataInput).appendTo('body');
form.submit();
},