Ruby on rails 如何在RubyonRails中通过管理员管理用户

Ruby on rails 如何在RubyonRails中通过管理员管理用户,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-4,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 4,Ruby On Rails 3.2,既然我只有一个模型和控制器(用户),我如何作为管理员管理和编辑其他用户配置文件 我尝试添加一个名为updateusers的新操作 def updateusers @other_user=User.find(params[:id]) if @other_user.update_attributes(otherusers_params) redirect_to '/' else redirect_to '/manage'

既然我只有一个模型和控制器(用户),我如何作为管理员管理和编辑其他用户配置文件

我尝试添加一个名为updateusers的新操作

def updateusers
    @other_user=User.find(params[:id])
    if @other_user.update_attributes(otherusers_params) 
            redirect_to '/' 
    else
            redirect_to '/manage'
   end
end 
这里的问题是:它正在用另一个用户的 资料

堆栈跟踪

    Started GET "/manage" for ::1 at 2016-03-19 21:06:08 +0300 Processing by
     UsersController#manage as HTML User Load (1.0ms) SELECT "users".* FROM 
"users" Rendered users/manage.html.erb within layouts/application (5.0ms) User 
Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 
[["id", 1]] Completed 200 OK in 53ms (Views: 51.0ms | ActiveRecord: 1.0ms)


    'Started GET "/users/10" for ::1 at 2016-03-19 21:06:10 +0300 Processing by 
UsersController#show as HTML Parameters: {"id"=>"10"} User Load (0.0ms) SELECT 
"users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 10]] Rendered 
users/show.html.erb within layouts/application (0.0ms) User Load (0.0ms) SELECT 
"users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 1]] Completed 200 
OK in 37ms (Views: 36.0ms | ActiveRecord: 0.0ms)


    Started GET "/editusers/10" for ::1 at 2016-03-19 21:06:11 +0300 Processing 
by UsersController#editusers as HTML Parameters: {"id"=>"10"} User Load (0.0ms) 
SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 10]] 
Rendered users/editusers.html.erb within layouts/application (4.0ms) User Load 
(1.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 1]] 
Completed 200 OK in 41ms (Views: 39.0ms | ActiveRecord: 1.0ms)


    Started PATCH "/users/10" for ::1 at 2016-03-19 21:06:15 +0300 Processing by 
UsersController#update as HTML Parameters: {"utf8"=>"✓", 
"authenticity_token"=>"6M1TGLQUEhiezCCg9/rT5IofdroMiQ0sm+bYcihgGDxTjDdFGU2Riou2p‌​
cRk5ncjCtFDGwfBj17Uq7gc0u329w==", "user"=>{"first_name"=>"g", "last_name"=>"g", 
"email"=>"g@g.g", "role"=>"editor", "image"=>"pic.png", "admins"=>""}, 
"other"=>"update", "id"=>"10"} User Load (0.0ms) SELECT "users".* FROM "users" 
WHERE "users"."id" = ? LIMIT 1 [["id", 1]] Unpermitted parameters: role, admins


    (0.0ms) begin transaction SQL (1.0ms) UPDATE "users" SET "first_name" = ?, 
"last_name" = ?, "email" = ?, "updated_at" = ? WHERE "users"."id" = ? 
[["first_name", "g"], ["last_name", "g"], ["email", "g@g.g"], ["updated_at", 
"2016-03-19 18:06:15.488284"], ["id", 1]] (47.0ms) commit transaction Redirected 
to localhost:8080/profile Completed 302 Found in 54ms (ActiveRecord: 48.0ms)

“editusers”中表单的用户ID设置为您的管理员(或登录用户)。很难说没有看到代码,但我认为您设置的editusers表单不正确。可能使用隐藏字段来保存要更新的用户的ID

尝试避免这种情况,并在“editusers”操作中设置@user对象
@user=user.find(10)

然后在您的视图中,为@user do | f |使用
表单(不带任何隐藏的ID字段。

10天后,是的,我这样做了-解决方案是以提交的名称命名的,我用不同的名称命名了两个提交,然后我使用了这样的更新操作

def update 
    if params[:current]
       @user = current_user
       if @user.update_attributes(user_params)
          redirect_to '/profile'
       else 
          redirect_to '/edit'
       end 

     elsif params[:other]
         @other_user=User.find(params[:id])
         if @other_user.update_attributes(otherusers_params)
            redirect_to '/'
          else 
             redirect_to '/manage'
          end 
     end 

end