无法找到id为sign_out的用户。
无法找到id为sign_out的用户。
我的rails应用中的退出链接无法工作。
我已经检查了我的routes.rb文件,如下所示,我的application.html.erb看起来是正确的路径。
得到以下错误。
ActiveRecord::RecordNotFound in UsersController#show 找不到id=sign_out的用户 Rails根目录:/Users/patrickwalsh/rails_projects/ytutorial 应用程序跟踪 | 框架跟踪 | 完整跟踪 app/controllers/users_controller.rb:4:in 'show' lib/disable_assets_logger.rb:11:in 'call'
我的routes.rb
Refectory::Application.routes.draw do
devise_for :users, :controllers => { :registrations => "users" }
devise_scope :user do
get 'login', to: "devise/sessions#new", as: "login"
get 'logout', to: "devise/sessions#destroy", as: "logout"
get 'logout', to: "users/sessions#destroy", as: "logout"
get 'signup', to: "users#new", as: "signup"
match '/users/:id', :to => 'users#show', :as => :user
end
root :to => 'tutorials#index'
devise_for :users do get '/users/sign_out' => 'devise/sessions#destroy'
get 'users/:id' => 'users#show'
end
resources :tutorials
resources :comments, only: [:show, :create, :update, :destroy]
resources :tutorials do
member { post :vote }
end
if Rails.env == "development"
match 'errors/404' => 'errors#error_404'
match 'errors/500' => 'errors#error_500'
end
unless Rails.application.config.consider_all_requests_local
match '*not_found', to: 'errors#error_404'
end
match 'tagged' => 'tutorials#tagged', :as => 'tagged'
end
以及我可以看到的application.html似乎是正确的路径。
非常感谢任何帮助!
<% if current_user.present? %>
我的用户控制器也有问题,我怀疑问题出在这里,但不确定错误是什么。
class UsersController < Devise::RegistrationsController def show @user = User.find(params[:id]) @tutorials = @user.tutorials end end
在这段内容中,用户遇到了一个问题,即当他们使用link_to
方法生成链接时,Rails会触发users/:id
路由,并将:id => :sign_out
传递进去。用户发现这是因为他们在application.js
文件中移除了jquery_ujs
。
jquery_ujs
处理链接中的data-method
属性(通过link_to
使用method选项生成),该属性用于确定正确的路由,具体解释可以参考这篇文章:https://thoughtbot.com/blog/a-tour-of-rails-jquery-ujs。
因此,解决方法就是确保在application.js
中包含以下内容:
//= require jquery //= require jquery_ujs
其他用户也反馈了类似的问题,并提到了JavaScript的影响。其中一个用户将jquery_ujs
放在了Bootstrap之后,导致出现问题。解决方法是将顺序改为://= require jquery //= require jquery_ujs //= require bootstrap
。
这个问题的出现原因是移除了jquery_ujs
,解决方法是重新添加并确保正确的顺序。
在升级到Rails 7与ImportMap和Hotwire套件时,我注意到移除了rails-ujs后出现了这个错误。将link_to
更改为button_to
已经修复了这个错误。
<%= button_to 'Log out', destroy_user_session_path, method: :delete %>
这样可以解决问题...但如果我需要使用link_to呢?
<%= link_to "Delete post", post_path(post), data: { turbo_method: "delete" } %> 这似乎也是一个选项,对吗?
原因:移除了rails-ujs,导致无法找到id为sign_out的用户。
解决方法:将link_to
更改为button_to
,或者使用link_to
并添加data: { turbo_method: "delete" }
。