【发布时间】:2014-06-10 21:13:11
【问题描述】:
这似乎是一个非常常见的问题,我已经遵循了谷歌的许多修复,但我的退出问题仍然存在。
这就是我所拥有的:Rails 4.1.1,Devise 3.2.4。哦,顺便说一句,我正在调用我的模型 AppUser 而不是 User
正在观看
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' %>
然而,我仍然收到 get route 错误:
No route matches [GET] "/app_users/sign_out"
为什么????
好的。 因此,将 :delete 更改为 :get on /config/initializer/devise.rb 解决了问题,当然删除了 method: :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”继承了我的控制器类。
当我完成我的项目时,我注意到其他页面上的 link_tos 也无法发送 :delete 方法。
一旦我修复了继承,它们都可以工作。
呸。
【问题讨论】:
-
这很奇怪,我可以重新创建该错误的唯一方法是直接输入方向...您可以发布您的路线文件吗?
-
你的 config/routes.rb 说什么
-
我将我的 routes.rb 添加到我的原始帖子中。虽然关于设计的行我相信只是'devise_for:app_users',这给了我一堆通过rake路线的路线,我也部分地包含在原始帖子中
-
这件事快把我逼疯了。我想念的东西一定很简单。但我不知道它是什么。
-
这个问题已经被问了很多次了....
标签: ruby-on-rails ruby devise