17

对于我的应用程序,我有人们可以注册的用户帐户。我使用devisegem 进行设置。

我还有一个用户页面,列出了所有注册到该站点的用户以及一个destroy链接。我希望我的管理员能够删除用户并将其重定向到此用户列表页面。但是当我单击链接以销毁特定用户时,它只是重定向到用户配置文件页面,并且不会从数据库中删除用户。

有人知道为什么吗?

**更新:按照建议更新了下面的代码,现在可以使用。

users_controller.rb

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

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

用户/index.html.erb

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

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

用户/_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>

路线.rb

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

5 回答 5

15

Devise 不提供开箱即用的此功能。您已经创建了自己的销毁操作,但您还必须创建到该操作的自定义路由。

在您的路线中:

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

然后在创建链接时:

<%= link_to "Destroy", admin_destroy_user_path(user), method: :delete, data: { confirm: "You sure?" } %>
于 2013-04-29T22:40:37.323 回答
5

根据设计 4.1 rake 路由和视图,使用以下内容将帮助您在以用户身份登录后删除该帐户。

<%= link_to "Cancel my account", registration_path(current_user), data: { confirm: "Are you sure?" }, method: :delete %>
于 2016-06-17T05:22:18.457 回答
4

我认为您的 routes.rb 中有:resources :users

问题是单击时您没有传递要删除的用户:

用户/_user.html.erb

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

看到在第二个参数中我添加了user而不是user_url

users_controller.rb

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

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

在控制器中,我删除了一个@user.destroy。你叫了两次。

希望能帮助到你!

于 2013-04-29T22:54:47.113 回答
1

如果包含有设计支持的模型,至少最新版本的设计确实提供了开箱即用的此类功能:registerable

class User < ApplicationRecord
  devise :database_authenticatable, :registerable
end

在某处app/views/layouts/application.html.erb

<%= link_to 'Delete my account', user_registration_path, method: :delete if user_signed_in? %>
于 2020-07-20T16:50:43.087 回答
0

或者从 rails c 你可以做这样的事情,其中​​“x”是用户 ID。

user = User.where(id: x)
user.destroy(1) 
于 2014-10-31T02:22:15.677 回答