我正在我现有的rails应用程序上安装设备。 我在退出时遇到了一些问题。
视图:
<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
路线:
new_user_session GET /users/sign_in(.:format) users/sessions#new
user_session POST /users/sign_in(.:format) users/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) users/sessions#destroy
如您所见,'sign_out'必须是[删除]。 但是,当我唱出我遇到的网站时,请遵循错误。
Routing Error: No route matches [GET] "/users/sign_out"
我不明白为什么[删除]更改为[GET]
更新:application.js
//= require angular
//= require angular-resource
//= require_tree .
更新: 我想说的另一件事是这个应用程序是使用angularJS构建的。 所以jquery文件存储在vendor / assets / stylesheets / bower_components / jquery中。 我使用了以下两个答案。但我仍然遇到了上述错误。
答案 0 :(得分:0)
好像你的应用中没有安装jquery-rails。这就是DELETE
请求被取代为GET
的原因。试试下面的
在gem 'jquery-rails'
中加入Gemfile
并运行bundle install
。稍后添加
//= require jquery
//= require jquery_ujs
到application.js
//= require jquery
//= require jquery_ujs
//= require angular
//= require angular-resource
//= require_tree .
答案 1 :(得分:0)
您需要jquery-ujs才能使用delete
发送<%= link_to ..., method: :delete %>
个请求。
//= require jquery
//= require jquery_ujs
//= require angular
//= require angular-resource
//= require_tree .
浏览器仅发送GET请求以响应单击的链接。所以jquery-ujs所做的是为具有data-method
属性的元素添加一个事件处理程序,该属性创建一个表单并发送它。这将创建一个POST请求,其中包含Rack :: MethodOverride中间件选中的特殊_method
参数,并将请求方法更改为DELETE
。
您还可以使用button_to创建实际表单,而不依赖于javascript:
<%= button_to "Sign out", destroy_user_session_path, method: :delete %>