6

当我尝试退出设计错误时,我收到以下错误:

没有路线匹配 [GET] "/d/users/sign_out"

我的标签是正确的,如下:

<%= link_to "Sign Out", destroy_session_path, :method=>:delete %>

我的设计路线是:

devise_for :users, :path_prefix=>"d", :controllers=>{:sessions=>"sessions"}

其他路线有:

resources :users#For CRUD defined after devise_for like in Devise Wiki

使用用于 ajax 登录的自定义控制器会话,例如 Devise wiki 页面:

class SessionsController < Devise::SessionsController

 def create
  respond_to do |format|
    format.html{ super }
    format.json do
     resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#failure")
     #resource = warden.authenticate!(:scope => resource_name, :recall => :failure)
     return sign_in_and_redirect(resource_name, resource)
    end
   end
  end

def sign_in_and_redirect(resource_or_scope, resource=nil)
  scope = Devise::Mapping.find_scope!(resource_or_scope)
  resource ||= resource_or_scope
  sign_in(scope, resource) unless warden.user(scope) == resource
  return render :json => {:success => true, :redirect => stored_location_for(scope) || after_sign_in_path_for(resource)}
end

def failure
  return render:json => {:success => false, :errors => ["Login failed."]}
end

end

设计初始化程序具有:

config.sign_out_via = :delete

关于可能导致问题的任何想法?我已经搜索了谷歌,但仍然很难过。

更新:

这是设计用户的 rails 路线文件的屏幕截图。对不起,它很小,但是您可以右键单击然后自行查看以更大的屏幕。

在此处输入图像描述

更新#2:

包含 jquery_ujs 文件。

更新#3:

控制台中显示确实正在传递删除,但它从 session_controller 跳转到 / 然后跳转到 d/users/sign_out ...不知道如何解决这个问题。

更新#4:

重定向时,它应该首先作为 DELETE 转到 d/users/sign_out。然后它重定向到root_url然后给出错误ERROR Errno::ECONNABORTED: An established connection was aborted by the software in your host machine. 它然后尝试重定向到 d/users/sign_out 作为 GET 失败的地方。

4

3 回答 3

4

这似乎是 Devise 和 Ruby 1.9.2-p290 之间的问题。更新到 Ruby 1.9.3 并运行bundle update 以确保使用最新版本的 Devise;似乎工作。

于 2012-07-16T15:52:44.360 回答
1

听起来您可能已从//= require jquery_ujsapplication.js 文件中删除。我认为这会处理链接详细信息以发出“删除”请求。无论哪种方式,就像现在一样,您正在制作一个显然不会影响您的destroy_user_session方法的“GET”。

于 2012-07-13T19:12:18.490 回答
1

改变:

config.sign_out_via = :delete

到:

config.sign_out_via = :get

看到这个相关:

没有路线匹配“/users/sign_out”设计rails 3

于 2012-07-13T19:35:08.267 回答