【问题标题】:Edit other user as admin in devise, ruby on rails在设计中以管理员身份编辑其他用户,ruby on rails
【发布时间】:2016-02-23 16:53:33
【问题描述】:

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

schema.rb:

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

        t.boolean  "admin",                  default: false
      end

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

  1. 在 2011 年的设计 wiki 中有一个条目:https://github.com/plataformatec/devise/wiki/How-To%3a-Manage-users-through-a-CRUD-interface

但我不明白我需要做什么:它在路线中提到"devise_for :users, :path_prefix => 'my'",但我的路线中没有。然后,它提到,我需要如何删除 params 哈希的密码密钥,但我的 users_controller 是空的。不再提供说明。

  1. stackoverflow 对此有回答:Devise: Allow admins to edit other users - Rails

但我不完全理解,需要做什么:我明白了,我需要在我的路线中添加 devise_for :users, :path_prefix => 'd',但发帖者还谈到了自己构建表单和控制器,以及隔离用户控制器。我不明白,他的意思。

  1. 还有另一个stackoverflow答案:Rails, Devise - Admin trying to edit another user profile, own profile loaded instead

在这一个中,发帖人使用了 cancan,看起来,他的用户控制器中确实有一个管理类,而我没有:

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

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

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

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

提前致谢!

【问题讨论】:

    标签: ruby-on-rails-4 devise


    【解决方案1】:

    我想通了:

    1. devise_for :users,: :path_prefix =&gt; 'my'的路由中添加前缀
    2. 在 devise_for 下面添加这个:resources :users
    3. 将edit.html.erb从注册中复制到用户。
    4. 更改&lt;%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %&gt;

    收件人:&lt;%= form_for(@user) do |f| %&gt;

    1. 将此添加到用户控制器:

         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)

    【讨论】:

    • 我知道这是一个老问题,但没有办法让它更干吗?有了这个解决方案,我最终得到了 2 个几乎相同的表单。
    • 这对我不起作用 :( 当用户不尝试更新密码时,我收到验证错误“密码不能为空”。
    • @lucas 我遇到了同样的问题“密码不能为空”。你找到解决方案了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    相关资源
    最近更新 更多