Reputation: 374
On my ruby on rails site, I want users to only be temporary, so every time a user logs out, I want it to also delete the user from the database. How do I do this?
Link to logout, I want this to also delete the current user from the database:
<%= link_to "Log out", logout_path, method: "delete" %>
Sessions controller:
class SessionsController < ApplicationController
before_action :require_none, only: [:new]
def new
end
def create
@user = User.find_by_username(params[:session][:username])
if @user && @user.authenticate(params[:session][:password])
session[:user_id] = @user.id
redirect_to '/home'
else
redirect_to '/login'
end
end
def destroy
session[:user_id] = nil
redirect_to '/forsale'
end
end
Users controller:
class UsersController < ApplicationController
before_action :require_none, only: [:new]
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
session[:user_id] = @user.id
redirect_to '/home'
else
redirect_to '/signup'
end
end
private
def user_params
params.require(:user).permit(:name, :username, :password);
end
end
Routes.rb
Rails.application.routes.draw do
# The priority is based upon order of creation: first created -> highest priority.
# See how all your routes lay out with "rake routes".
# You can have the root of your site routed with "root"
root 'welcome#index'
get '/login' => 'sessions#new'
post '/login' => 'sessions#create'
delete '/logout' => 'sessions#destroy'
get '/logout' => 'sessions#destroy'
resources :sessions
get 'signup' => 'users#new'
resources :users
get '/home' => 'home#view'
get '/forsale' => 'forsale#view'
get '/contact' => 'contact#view'
get '/about' => 'about#view'
end
Upvotes: 1
Views: 12115
Reputation: 4639
If you want to destroy the user record when you log out then given your current code, you can probably just do this
class SessionsController < ApplicationController
...
def destroy
User.find(session[:user_id]).destroy
session[:user_id] = nil
redirect_to '/forsale'
end
end
Upvotes: 6