Rails应用程序无法在javascript中找到'destroy_user_session_path'
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails应用程序无法在javascript中找到'destroy_user_session_path'相关的知识,希望对你有一定的参考价值。
我有一个Rails应用程序,从2.2到3.2开始已经迁移了很多年。我正在使用Devise和Omniauth来使登录正常工作,不幸的是,我认为在迁移过程中我搞砸了。
[当我尝试在application.html.erb中设置会话删除时,出现以下错误:
undefined local variable or method `destroy_user_session_path' for #<#<Class:0xb468e278>:0xb423e1dc>
application.html.erb:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<title>Coffee Tracker</title>
<%= stylesheet_link_tag 'application'%>
<!--%= stylesheet_link_tag 'scaffold' %-->
</head>
<!--%= javascript_include_tag :defaults %-->
<%= javascript_include_tag 'application' %>
<%= csrf_meta_tag %>
...snip...
<% if user_signed_in? %>
<span id="currentuser"><%= current_user.email %></span>
<%= link_to('Logout', destroy_user_session_path, :method => 'delete') %>
<% else %>
尝试行时,我也遇到相同的错误:
<%= link_to('Logout', destroy_user_session_path, :method => :delete) %>
application.js
// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults
//= require_self
//= require_tree .
//= require jquery
//= require jquery_ujs
Rails 3.2.0红宝石1.8.7(2011-02-18补丁程序334)[i686-linux]
- rails(3.2.0)
- jquery-rails(2.0.0)
- 设计(2.0.0)
- omniauth(1.0.2)
- omniauth-facebook(1.2.0)
- omniauth-oauth2(1.0.0)
更新:这是耙路:
user_omniauth_callback /users/auth/:action/callback(.:format) users/omniauth_callbacks#(?-mix:facebook)
coffee_list GET /coffee/list(.:format) coffee#list
root / menu#index
/:controller(/:action(/:id(.:format))) :controller#:action
如果您想不使用omniauthable
而使用database_authenticatable
,则需要手动添加路由。
在routes.rb
中:
devise_scope :user do
delete "/users/sign_out" => "devise/sessions#destroy"
end
然后在您看来:
= link_to "Sign out", users_sign_out_path, :method => :delete
有关更多信息,请参阅以下Omniauth Facebook和Twitter教程:
- https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview
- http://railscasts.com/episodes/235-devise-and-omniauth-revised
我们为什么必须这样做?在此处查看Jose Valim的基本原理:
我缺少添加路线的数据库可验证设计模块。
app / models / user.rb:
devise :omniauthable, :database_authenticatable
耙道:
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
user_omniauth_callback /users/auth/:action/callback(.:format) users/omniauth_callbacks#(?-mix:facebook)
coffee_list GET /coffee/list(.:format) coffee#list
root / menu#index
/:controller(/:action(/:id(.:format))) :controller#:action
我找到文档以确认显示使用可验证的模块,并在devise_for文档中创建这些路由:http://rubydoc.info/github/plataformatec/devise/master/ActionDispatch/Routing/Mapper#devise_for-instance_method
您有两种解决方案:
- 添加:method =>:delete到link_to
- 或者,在devise.rb文件中,更改config.sign_out_via =:删除至config.sign_out_via =:get
user_session_path(current_user), :method => :delete
是我的建议,除非您有特定的命名路线“ destroy”
https://whatraghulearned.today/2019/04/05/rails-kick-a-logged-in-userdevise-out-of-his-session/我遇到了同样的问题,并找到了一种方法来注销用户,如我在博客文章中所述。
以上是关于Rails应用程序无法在javascript中找到'destroy_user_session_path'的主要内容,如果未能解决你的问题,请参考以下文章
内联 Javascript 在 Rails 3.1 上重新渲染部分 ruby 时无法正常工作
Rails:在 Rails 视图中使用 javascript 函数的正确语法
Rails 4:部分渲染后无法使用javascript(使用ajax)
为啥 Rails 无法启动并显示“预期在 `app/assets/config/manifest.js` (Sprockets::Railtie::ManifestNeededError) 中找到清单