ruby-on-rails – 带设计的Rails 3:没有路由匹配/ d/users/sign_out

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

No route matches [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:

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

更新#4:

重定向时,首先将d / users / sign_out作为DELETE传递给它.然后重定向到root_url,然后给出错误ERROR Errno :: ECONNABORTED:已建立的连接被主机中的软件中止.然后它尝试重定向到d / users / sign_out作为GET失败的地方.

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

转载注明原文:ruby-on-rails – 带设计的Rails 3:没有路由匹配/ d/users/sign_out - 代码日志