Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Couldn't find User with id=sign_out

Sign-out link isn't working in my rails application.

I have checked my routes.rb which is listed below and my application.html.erb looks to follow the right path.

Getting the following error.

ActiveRecord::RecordNotFound in UsersController#show

Couldn't find User with id=sign_out
Rails.root: /Users/patrickwalsh/rails_projects/ytutorial

Application Trace | Framework Trace | Full Trace
app/controllers/users_controller.rb:4:in `show'
lib/disable_assets_logger.rb:11:in `call'

My 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

and my application.html which seems to be following the right route from what I can see.

Any help is greatly appreciated!

<% if current_user.present? %>
          <li><%= link_to "Log out", destroy_user_session_path, (:method => "delete") %></li>
        <% else %>       
          <li><%= link_to "Log in", new_user_session_path %></li>
          <li><%= link_to "Sign up", new_user_registration_path %></li>
        <% end %>

My users controller as well as I have a suspicion this is where the problem lies but not sure what the error is.

class UsersController < Devise::RegistrationsController
def show
  @user = User.find(params[:id])
  @tutorials = @user.tutorials
end
end
like image 638
PatGW Avatar asked Mar 18 '14 20:03

PatGW


1 Answers

I have started noticing this error after removing rails-ujs. This was done as part of the upgrade to Rails 7 with ImportMap and Hotwire suite. Changing link_to to button_to has fixed this error in this case.

<%= button_to 'Log out', destroy_user_session_path, method: :delete %>

https://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html#replacements-for-rails-ujs-functionality

like image 111
bunufi Avatar answered Sep 22 '22 20:09

bunufi