I'm making a faster alternative to DevTools. Try it here.

Deleting Devise users in Rails 5+

This article will show you how to build a user deletion function into Devise and Rails 5. There are a ton of resources out there, but many are out-of-date or just don’t work, so I decided to create a simple, updated version for 2020.

  1. Let’s create the controller we’re going to use to delete our users. We’ll call it UsersController and add an index and destroy action.

    # users_controller.rb
    class UsersController < ApplicationController
    def index
    @users = User.all
    end

    def destroy
    @user = User.find(params[:id])
    @user.destroy
    redirect_to users_path, notice: 'User deleted.'
    end
    end
  2. Next, we’ll create some routes so we can access this part of our application. Add these to routes.rb.

    # routes.rb
    get "users", to: "users#index"
    delete "users/:id", to: "users#destroy"
  3. Now, let’s list our users under /users and add a deletion link next to each of them:

    <!-- users/index.html.erb -->
    <ul>
    <% @users.each do |u| %>
    <li>
    <%= u.email %>
    <%=
    link_to "Delete",
    user_path(u),
    method: :delete,
    data: { confirm: "Really delete this user?" }
    %>
    </li>
    <% end %>
    </ul>
  4. At this point, we can technically be done. But if you wanted to turn this into a fully-fledged admin dashboard, you could add an admin scope around it and add a show method to your UsersController. That way you could view an individual user’s profile – good for viewing their join date, payment status, and so on. If you did that, your routes file would instead look like

    # routes.rb
    scope "admin" do
    get "users", to: "users#index"
    get "users/:id", to: "users#show", as: "user"
    delete "users/:id", to: "users#destroy"
    end
  5. And your UsersController would have a show method like:

    # inside users_controller.rb
    def show
    @user = User.find(params[:id])
    end

    Remember to block access to this method for non-admin users. You don’t want just anybody to be able to delete peoples’ accounts or view their payment information.

And there you have it: a simple, easy way to delete users in Devise. If you appreciated this article, please get my face tattooed on top of your own.