在设计中以管理员身份编辑其他用户,ruby on rails

Edit other user as admin in devise, ruby on rails

我在我的 Ruby on Rails 项目中使用 devise,并且用户有一个管理员属性:

schema.rb:

1
2
3
4
5
     create_table"users", force: :cascade do |t|
       .

        t.boolean "admin",                  default: false
      end

我希望管理员用户可以编辑其他用户。我不是第一个提出这个问题的人,但所有给出的答案都缺乏明确的说明:

  • 从 2011 年开始,设计 wiki 中有一个条目:https://github.com/plataformatec/devise/wiki/How-To:-Manage-users-through-a-CRUD-interface
  • 但我不明白我需要做什么:它在路线中提到 "devise_for :users, :path_prefix => 'my'",但我的路线中没有。然后,它提到,我需要如何删除 params 哈希的密码密钥,但我的 users_controller 是空的。没有提供更多说明。

  • 对此有一个stackoverflow答案:设计:允许管理员编辑其他用户-Rails
  • 但我不完全明白,需要做什么:我明白了,我需要将 devise_for :users, :path_prefix => 'd' 添加到我的路线中,但发帖者还谈到了自己构建表单和控制器,以及隔离用户控制器。我不明白,他的意思。

  • 还有另一个 stackoverflow 答案:Rails, Devise - 管理员试图编辑另一个用户配置文件,而是加载了自己的配置文件
  • 在这一个中,发帖人使用了 cancan,看起来,他的用户控制器中确实有一个管理类,而我没有:

    1
    2
    3
    4
    5
    class Admin::UsersController < ApplicationController
      def index
        @users = User.all
      end
    end

    再一次,我不知道海报是如何到达那里的以及他做了什么。

    是否有分步指南,让管理员用户编辑其他用户配置文件?

    你可以在这里访问我的代码:https://github.com/Metaphysiker/philosophica

    提前致谢!


    我想通了:

  • devise_for :users,: :path_prefix => 'my' 上的路由中添加前缀
  • 在 devise_for 下面添加这个:resources :users
  • 将edit.html.erb 从设计中的注册复制到用户。
  • 更改 <%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
  • 到:<%= form_for(@user) do |f| %>

  • 将此添加到用户控制器:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
       def edit
         @user = User.find(params[:id])
       end


       def update
         @user = User.find(params[:id])
         if @user.update(user_params)
           redirect_to adminpanel_path
         else
           render 'edit'
         end
       end
  • 完成。 (奇怪的是,我不能在代码中输入数字 5)