我如何以管理员身份管理和编辑其他用户个人资料,因为我有一个模型和控制器(用户)?
我尝试添加一个名为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)开始事务SQL(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)
答案 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