Rails - How To Destroy Users Created Under Devise?

北城以北 提交于 2019-11-27 14:46:35

问题


For my application, I have user accounts that people can sign up. I use the devise gem for the setup.

I also have a users page that lists out all the users registered to the site along with a destroy link. I want my administrator to be able to delete users and have it redirected to this users listing page. But when I click the link to destroy a specific user, it just redirects to the user profile page and does not delete the user from the database.

Does somebody know why?

**UPDATE: Updated code below as recommended and works now.

users_controller.rb

  def destroy
    @user = User.find(params[:id])
    @user.destroy

    if @user.destroy
        redirect_to root_url, notice: "User deleted."
    end
  end

users/index.html.erb

<div class = "container">
    <div id="usersview">
    <b>USERS DIRECTORY</b>
    <%= render @users %>
</div>

<center>
    <%= will_paginate @users %>
</center>
</div>

users/_user.html.erb

<div class="comments">
  <%= link_to user.name, user %>
  <% if current_user.try(:admin?) && !current_user?(user) %>
       <%= link_to "Destroy", admin_destroy_user_path(user), method: :delete, data: { confirm: "You sure?" } %>
  <% end %>
</div>

routes.rb

devise_for :users    
match 'users/:id' => 'users#destroy', :via => :delete, :as => :admin_destroy_user
match 'users/:id' => 'users#show', as: :user
resources :users

回答1:


Devise doesn't provide this functionality out of the box. You have created your own destroy action, but you also have to create a custom route to that action.

In your routes:

 match 'users/:id' => 'users#destroy', :via => :delete, :as => :admin_destroy_user

And then when creating the link:

<%= link_to "Destroy", admin_destroy_user_path(user), method: :delete, data: { confirm: "You sure?" } %>



回答2:


According to devise 4.1 rake routes and views, using the following will help you delete the account once logged in as a user.

<%= link_to "Cancel my account", registration_path(current_user), data: { confirm: "Are you sure?" }, method: :delete %>



回答3:


I think you have in your routes.rb: resources :users

The problem is that you are not passing the user that you want to delete when clicking:

users/_user.html.erb

<%= link_to "Destroy", user, method: :delete, data: { confirm: "You sure?" } %>

See that in second param I added user instead of user_url.

users_controller.rb

 def destroy
    @user = User.find(params[:id])

    if @user.destroy
        redirect_to root_url, notice: "User deleted."
    end
  end

In controller I removed an @user.destroy. You were calling it twice.

Hope it helps!




回答4:


Or from rails c you can do something like this where "x" is user id.

user = User.where(id: x)
user.destroy(1) 


来源:https://stackoverflow.com/questions/16289299/rails-how-to-destroy-users-created-under-devise

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!