jay*_*del 43 ruby-on-rails devise
问题:简而言之,当我尝试向我的应用程序安装注销链接时,它无法正常工作.这里有我认为放在这里的背景(如果你想要别的什么,请戳我)......
我在haml视图中得到了这个:
= link_to("Logout", destroy_user_session_path, :method => :delete)
Run Code Online (Sandbox Code Playgroud)
它在视图中生成:
<a href="/users/sign_out" data-method="delete" rel="nofollow">Logout</a>
Run Code Online (Sandbox Code Playgroud)
我在我的config/initializers/devise.rb中验证了我的设置没有注释并且正确:
config.sign_out_via = :delete
Run Code Online (Sandbox Code Playgroud)
我验证了以下路线:
destroy_user_session DELETE /users/sign_out(.:format) {:action=>"destroy", :controller=>"devise/sessions"}
Run Code Online (Sandbox Code Playgroud)
我的routes.rb中也有这点诡计,我怀疑这与我的问题有关:
devise_for :users, :controllers => {:sessions => "devise/sessions", :registrations => "users"}
resources :users
Run Code Online (Sandbox Code Playgroud)
最后一点是因为我想在自己的控制器中管理(编辑,创建和删除)用户.
我得到的错误信息如下:
ActiveRecord::RecordNotFound in UsersController#show
Couldn't find User with ID=sign_out
Rails.root: /home/jaydel/projects/mbsquared-projects/Wilson-Goldrick
app/controllers/users_controller.rb:16:in `show'
Run Code Online (Sandbox Code Playgroud)
在我的服务器日志中,我看到了这个请求:
Started GET "/users/sign_out" for 127.0.0.1 at 2011-08-04 13:08:51 -0500
Processing by UsersController#show as HTML
Parameters: {"id"=>"sign_out"}
Run Code Online (Sandbox Code Playgroud)
有人有主意吗?
小智 83
解决这个问题的正确方法(REST方式)是更改注销链接以使用DELETE方法.这是一个非常简单的修复,改变了这个:
link_to "Log out", destroy_user_session_path
Run Code Online (Sandbox Code Playgroud)
对此:
link_to "Log out", destroy_user_session_path, :method => :delete
Run Code Online (Sandbox Code Playgroud)
ka8*_*725 33
当我application.js
从这一行删除时,我遇到了与rails 3.2相同的问题:
//= require jquery_ujs
Run Code Online (Sandbox Code Playgroud)
所以,application.js
如果你没有它,我认为你必须在你的行中插入这一行.
PS.此行为意味着rails适配器jquery
不起作用.因此,您应确保它是否已在浏览器中的html中加载.您应该在开发模式下测试它,因为您将在生产中使用压缩的js,并且在那里找到一些东西将非常困难.
Oli*_*ves 16
问题在于,在您的日志中,注销请求是GET请求.
Started GET "/users/sign_out"
Run Code Online (Sandbox Code Playgroud)
但是注销路线是DELETE
destroy_user_session DELETE /users/sign_out(.:format)
Run Code Online (Sandbox Code Playgroud)
为什么你越来越异常的原因是它越来越与创造的途径之一混淆resources :users
这会是这样的
edit_user GET /users/(:id)(.:format) {:action=>"edit", :controller=>"users"}
Run Code Online (Sandbox Code Playgroud)
基本上'sign_out'被误认为是id.
我不确定删除链接为什么不作为DELETE请求进行.虽然在改变
config.sign_out_via = :delete
Run Code Online (Sandbox Code Playgroud)
是:get
可以解决的问题.
小智 7
我已经尝试了这里提到的所有解决方案,但此问题的真正解决方案如下:
<%= link_to "Sign Out", destroy_user_session_path, 'data-turbo-method': :delete%>
Run Code Online (Sandbox Code Playgroud)
如果它不只是刷新或重新启动服务器,它就可以工作。
你需要两者
link_to "Log out", destroy_user_session_path, method: :delete
&&这些包含在application.js中
//= require jquery
//= require jquery_ujs
Run Code Online (Sandbox Code Playgroud)
.显然,如果由于某种原因它不存在,请不要忘记将其添加到Gemfile.
gem 'jquery-rails'
归档时间: |
|
查看次数: |
38211 次 |
最近记录: |