Подтвердить что ты не робот

Rails - как уничтожить пользователей, созданных в разработке?

Для моего приложения у меня есть учетные записи пользователей, которые могут зарегистрироваться. Я использую камень devise для настройки.

У меня также есть страница пользователя, в которой перечислены все пользователи, зарегистрированные на сайте, а также ссылка destroy. Я хочу, чтобы мой администратор имел возможность удалять пользователей и перенаправлять их на эту страницу со списком пользователей. Но когда я нажимаю ссылку, чтобы уничтожить конкретного пользователя, она просто перенаправляется на страницу профиля пользователя и не удаляет пользователя из базы данных.

Кто-нибудь знает, почему?

** UPDATE: обновленный код ниже, как рекомендовано и работает сейчас.

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>

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
4b9b3361

Ответ 1

Devise не предоставляет эту функциональность из коробки. Вы создали свое собственное действие destroy, но вам также нужно создать собственный маршрут для этого действия.

В ваших маршрутах:

 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?" } %>

Ответ 2

Я думаю, что у вас есть на ваших маршрутах. rb: resources :users

Проблема заключается в том, что вы не передаете пользователя, который хотите удалить, когда нажимаете:

пользователи/_user.html.erb

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

Посмотрите, что во втором параметре я добавил пользователя вместо 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. Вы звонили дважды.

Надеюсь, что это поможет!

Ответ 3

В соответствии с изобретением 4.1 рейк-маршруты и представления, использование следующего поможет вам удалить учетную запись после входа в систему как пользователь.

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

Ответ 4

Или из рельсов c вы можете сделать что-то вроде этого, где "x" - это идентификатор пользователя.

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