在Devise中将用户作为管理员销毁

时间:2011-03-02 16:35:56

标签: ruby-on-rails devise

我正在尝试使用Devise来删除用户。我有一个用户列表,每个用户都有他们的电子邮件和旁边的“删除”链接,只有管理员才能看到。我希望能够只需单击删除链接即可永久删除用户。以下代码删除了我,管理员!

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

我认为你需要将你要删除的用户的id传递给某种'destroy_user'方法:

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

但是当你必须向user_registration_path提交DELETE请求时如何做到这一点?

------编辑--------

好的,我已将此方法添加到我的用户控制器:

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

因此,我需要告诉用户控制器在收到DELETE请求时调用destroy方法。你怎么做routes.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?" %>

换句话说,你应该在routes.rb文件中添加什么来区分不同的请求类型(GET,DELETE等)到同一个URL?

3 个答案:

答案 0 :(得分:4)

将您要销毁的实际用户替换为“user”,例如:如果您将该电子邮件打印为user.email,则将用户插入其中,然后插入

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

答案 1 :(得分:2)

Devise不提供删除其他用户的操作,仅删除当前登录的用户。您必须在其中一个控制器中创建自己的操作(很可能是控制器具有显示所有用户的操作),以处理删除当前登录用户以外的用户。

答案 2 :(得分:0)

知道了!只需在路由中添加:via参数:

match '/users/:id', :to => 'users#show',    :as => :user,         :via => :get
match '/users/:id', :to => 'users#destroy', :as => :destroy_user, :via => :delete
相关问题