Ruby on rails 4 rails 4.2链接到方法:无路由匹配[POST]
我只是想用Ruby on rails 4 rails 4.2链接到方法:无路由匹配[POST],ruby-on-rails-4,rails-routing,link-to,Ruby On Rails 4,Rails Routing,Link To,我只是想用method::delete构造一个链接到,在我的用户控制器中调用destroy方法: <%= link_to 'disable token', user_path(user), method: :delete, data: { confirm: 'Are you sure?'} %> 事实上,我知道javascript已经加载并执行了它应该执行的操作,因为它会生成“你确定吗?”警报对话框 然而,当我点击链接时,我得到以下信息: No route matches [POS
method::delete
构造一个链接到
,在我的用户控制器中调用destroy
方法:
<%= link_to 'disable token', user_path(user), method: :delete, data: { confirm: 'Are you sure?'} %>
事实上,我知道javascript已经加载并执行了它应该执行的操作,因为它会生成“你确定吗?”警报对话框
然而,当我点击链接时,我得到以下信息:
No route matches [POST] "/users/9"
实际上没有这样的路线,因为我唯一的路线是:
users_path GET /users(.:format) users#index
user_path DELETE /users/:id(.:format) users#destroy
(对我来说)一个谜是为什么Rails一开始就在这条路线上发帖子?您将注意到URL是正确的(“/users/9”),但HTTP动词不是:POST
正在设置请求的参数:
{"_method"=>"delete",
"authenticity_token"=>"VcAVJF1/f9mwjNI4GPteRtDiyjKobnioF0hIQvF+3BVMzUnIoHymM2Z3w2sqSLJqJ11sZ/tIHt78aA9
}
在这里,您可以看到\u方法
键被设置为delete
,这就是为什么路由错误
我被难住了
Edit:如果我将我的link\u更改为call以包含remote:true
Rails将其路由到正确的路由!所以,为了解决这个问题,我把我的控制器改成了使用UJS,但我不喜欢这样,因为,就我所知,我以前拥有的应该可以工作
下面是指向
调用的链接,它以JS的形式发送一个正确的删除请求:
<%= link_to 'disable token', u, method: :delete, data: { confirm: 'Are you sure?'}, remote: true %>
也可以尝试明确说明控制器的操作和方法(注意@user.id
是一个示例,您可能会以不同的方式引用它):
在本例中,我怀疑还有其他javascript覆盖了rails行为
我也有同样的问题(但是它得到了一个GET请求,而不是POST)。结果是一个完全不相关的JS,它在选择器中过于通用,在按钮周围的所有锚定标记上调用jquery的stopPropagation
,这就是我特定HTML的设置方式。BTW——我已经浏览了堆栈上与link_to和method::delete相关的各种问答,但是找不到有这个问题的人。如果有答案,请发布!谢谢。也许使用chrome开发者工具之类的工具,检查这个链接到生成的HTML会有所帮助。您还可以使用此选项来确保查看的链接正确。应用程序中使用了哪个rails版本?您好,这行中的u
是什么:
?我通过编辑问题的正文和标题回答了上述评论。但更直接的答案依次是:参见链接_生成的HTML正文;我使用的是Rails 4.2.5.2;u是一个用户模型的实例。感谢Adrian的建议,但我担心它不起作用。好的,是否返回了相同的错误?另外,您能否将路由文件的内容添加到问题中?然后,如果我能进一步提供帮助,我将修改我的答案或删除它。
{"_method"=>"delete",
"authenticity_token"=>"VcAVJF1/f9mwjNI4GPteRtDiyjKobnioF0hIQvF+3BVMzUnIoHymM2Z3w2sqSLJqJ11sZ/tIHt78aA9
}
<%= link_to 'disable token', u, method: :delete, data: { confirm: 'Are you sure?'}, remote: true %>
<%= link_to 'disable token', url_for(action: :destroy, id: @user.id), method: :delete, data: { confirm: 'Are you sure?'} %>