由管理员在ruby on rails

时间:2016-03-19 17:33:24

标签: ruby-on-rails

我如何以管理员身份管理和编辑其他用户个人资料,因为我有一个模型和控制器(用户)?

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

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

问题在于:它正在使用other_user的数据更新我的管理员用户

堆栈跟踪
在2016-03-19 21:06:08开始GET“/ manage”为:: 1 + 0300由UsersController处理#management作为HTML用户负载(1.0ms)SELECT“users”。* FROM“users”呈现用户/管理布局/应用程序内的.html.erb(5.0ms)用户加载(0.0ms)SELECT“users”。* FROM“users”WHERE“users”。“id”=? LIMIT 1 [[“id”,1]]在53ms完成200 OK(浏览次数:51.0ms | ActiveRecord:1.0ms)

'开始获取“/ users / 10”for :: 1在2016-03-19 21:06:10 +0300由UsersController处理#show as HTML参数:{“id”=>“10”}用户加载(0.0ms)SELECT“users”。* FROM“users”WHERE“users”。“id”=? LIMIT 1 [[“id”,10]]在布局/应用程序内呈现users / show.html.erb(0.0ms)用户加载(0.0ms)SELECT“users”。* FROM“users”WHERE“users”。“id “=? LIMIT 1 [[“id”,1]]在37ms完成200 OK(浏览次数:36.0ms | ActiveRecord:0.0ms)

在2016-03-19 21:06:11开始GET“/ editusers / 10”for :: 1 + 0300由UsersController#editusers处理作为HTML参数:{“id”=>“10”}用户加载(0.0ms)SELECT“users”。* FROM“users”WHERE“users”。“id”=? LIMIT 1 [[“id”,10]]在布局/应用程序内呈现用户/ editusers.html.erb(4.0ms)用户负载(1.0ms)SELECT“users”。* FROM“users”WHERE“users”。“id “=? LIMIT 1 [[“id”,1]]在41ms完成200 OK(浏览次数:39.0ms | ActiveRecord:1.0ms)

在2016-03-19 21:06:15开始PATCH“/ users / 10”for :: 1 + 0300用户控制处理#date更新为HTML参数:{“utf8”=>“✓”,“authenticity_token “=>”6M1TGLQUEhiezCCg9 / rT5IofdroMiQ0sm + bYcihgGDxTjDdFGU2Riou2p cRk5ncjCtFDGwfBj17Uq7gc0u329w ==“,”user“=> {”first_name“=>”g“,”last_name“=>”g“,”email“=>” g @ gg“,”role“=>”editor“,”image“=>”pic.png“,”admins“=>”“},”其他“=>”更新“,”id“ =>“10”}用户加载(0.0ms)SELECT“users”。* FROM“users”WHERE“users”。“id”=?限制1 [[“id”,1]] 未经许可的参数:角色,管理员

(0.0ms)开始事务SQ​​L(1.0ms)UPDATE“users”SET“first_name”=?,“last_name”=?,“email”=?,“updated_at”=?在哪里“用户”。“id”=? [[“first_name”,“g”],[“last_name”,“g”],[“email”,“g @ gg”],[“updated_at”,“2016-03-19 18:06:15.488284” ],[“id”,1]](47.0ms)commit transaction重定向到localhost:8080 / profile已完成302找到54ms(ActiveRecord:48.0ms)

2 个答案:

答案 0 :(得分:1)

如果它更新了错误的用户,则表示params[:id]是正在更新的用户的ID。您是否在params中传递了要更新的用户的ID?尝试在控制器操作的顶部调用puts params.inspect以查看正在传递的数据。你需要用他们的id查找@other_user,你需要确保@ other_user的id与其他表单数据一起传递。

答案 1 :(得分:0)

10天后,是的,我做了 - 解决方案是提交名称,我将这两个提交命名为不同的名称<%= f.submit "update", name:"other" %> 然后我使用了像这样的更新动作

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