Уничтожение пользователей в качестве администратора в Devise - PullRequest
4 голосов
/ 02 марта 2011

Я пытаюсь использовать Devise для удаления пользователей. У меня есть список пользователей, каждый из которых имеет свой адрес электронной почты и ссылку «удалить» рядом с ними, видимую только мне, администратору. Я хочу иметь возможность просто щелкнуть ссылку удаления, чтобы навсегда удалить пользователя. Следующий код удаляет меня, администратор!

<%= link_to "delete", user_registration_path, :method => :delete, :confirm => "You sure?" %>

Я думаю, вам нужно передать: id пользователя, которого вы хотите удалить, в какой-либо метод destroy_user:

@user.find(params[:id]).destroy_user

Но как это сделать, когда вам нужно отправить запрос DELETE в user_registration_path ??

------ РЕДАКТИРОВАТЬ --------

ОК, я добавил этот метод в свой пользовательский контроллер:

def destroy
  User.find(params[:id]).destroy
  flash[:success] = "User destroyed."
  redirect_to users_path
end

Итак, мне нужно сказать контроллеру пользователей, чтобы он вызывал метод destroy, когда он получает запрос DELETE. Как вы делаете это в rout.rb? В настоящее время у меня есть:

match '/users/:id', :to => 'users#show',    :as => :user
match '/all_users', :to => 'users#index',   :as => :all_users

Мне нужно что-то вроде:

match 'delete_user', :to => 'users#destroy', :as => :destroy_user, :method => :delete

но это не работает. А что должно идти по ссылке?

<%= link_to "delete", destroy_user, :method => :delete, :confirm => "You sure?" %>

Другими словами, что вы должны поместить в файл route.rb, чтобы различать разные типы запросов (GET, DELETE и т. Д.) Для одного и того же URL-адреса?

Ответы [ 3 ]

4 голосов
/ 02 марта 2011

Замените 'user' реальным пользователем, которого вы хотите уничтожить, например: если вы распечатываете электронное письмо как user.email, тогда подключите туда пользователя и т. Д.

<%= link_to "delete", user_registration_path(user), :method => :delete, :confirm => "You sure?" %>
2 голосов
/ 02 марта 2011

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

0 голосов
/ 03 марта 2011

Понял!Просто нужно добавить аргумент: via в маршруты:

match '/users/:id', :to => 'users#show',    :as => :user,         :via => :get
match '/users/:id', :to => 'users#destroy', :as => :destroy_user, :via => :delete
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...