在设计中编辑其他用户作为管理员,在轨道上编辑ruby

时间:2016-02-23 16:53:33

标签: ruby-on-rails-4 devise

我在Ruby on Rails项目中使用设计,用户有一个admin-attribute:

schema.rb:

     create_table "users", force: :cascade do |t|
       .

        t.boolean  "admin",                  default: false
      end

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

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

    1. 有一个stackoverflow答案:Devise: Allow admins to edit other users - Rails
    2. 但我不完全明白,需要做什么:我知道,我需要将devise_for :users, :path_prefix => 'd'添加到我的路线中,但是海报还谈到了自己构建表单和控制器,并隔离Userscontroller。我不明白,他的意思是什么。

      1. 还有另一个stackoverflow答案:Rails, Devise - Admin trying to edit another user profile, own profile loaded instead
      2. 在这一篇中,海报使用了cancan,看起来,他的用户控件中确实有一个管理类,我没有:

        class Admin::UsersController < ApplicationController
          def index
            @users = User.all
          end
        end
        

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

        是否有分步指南,让admin-user编辑其他用户配置文件?

        您可以在此处访问我的代码:https://github.com/Metaphysiker/philosophica

        提前致谢!

1 个答案:

答案 0 :(得分:4)

我明白了:

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

    1. 将此添加到usercontroller:

         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
      
    2. 完成。 (奇怪的是,我无法将5号代码放入代码中)