这似乎是一个非常常见的问题,我已经遵循了谷歌的许多修复,但我的退出问题仍然存在。
这是我拥有的:Rails 4.1.1、Devise 3.2.4。哦,顺便说一句,我称我的模型为 AppUser 而不是 User
在 View 中
As AppUser: <br>
<% if app_user_signed_in? %>
Signed in as: <%= current_app_user.email %> <br>
<%= link_to "Sign Out", destroy_app_user_session_path, method: :delete %>
<% else %>
<%= link_to "Sign Up", new_app_user_registration_path %> <br>
<%= link_to "Sign In", new_app_user_session_path %>
<% end %>
/config/routes.rb
Rails.application.routes.draw do
devise_for :app_users
root 'home#index'
end
这些是rake路线的部分路线
Prefix Verb URI Pattern Controller#Action
new_app_user_session GET /app_users/sign_in(.:format) devise/sessions#new
app_user_session POST /app_users/sign_in(.:format) devise/sessions#create
destroy_app_user_session DELETE /app_users/sign_out(.:format) devise/sessions#destroy
在 application.js 上
//= require jquery
//= require jquery_ujs
//= require_tree .
在 application.html.erb 上,我也包含了这个
<%= javascript_include_tag 'application' %>
然而,我仍然收到获取路由错误:
No route matches [GET] "/app_users/sign_out"
为什么????
好的。 因此,将 :delete 更改为 :get on/config/initializer/devise.rb 解决了这个问题,方法:当然删除了 :delete。
# The default HTTP method used to sign out a resource. Default is :delete.
config.sign_out_via = :get
可是我还是不明白?为什么?如果我在 devise.rb 上保留 :delete,我错过了什么?
========================
[已解决] 我可能应该在这里编辑状态更新:
我终于知道为什么了。尽管我已经正确设置了我的 javascript 等,但它没有加载,因为我愚蠢地从“ActionController::Base”而不是“ApplicationController”继承了我的 Controller 类。
当我完成我的项目时,我注意到其他页面上的 link_tos 也无法发送 :delete 方法。
一旦我修复了继承,它们就都起作用了。
啊。
最佳答案
路线.rb
devise_scope :app_user do
get "/app_users/sign_out" => "devise/sessions#destroy"
end
关于ruby-on-rails - Rails 设计 sign_out 没有路由匹配 [GET],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24131470/