0

1つのモデルとコントローラ(ユーザー)があるので、管理者として他のユーザープロファイルを管理したり編集するにはどうすればよいですか? Rubyの管理者によるユーザーの管理方法

は、私がここでの問題と呼ばれる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の データと私のadminユーザーを更新している

スタックトレース

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 "https://stackoverflow.com/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 "https://stackoverflow.com/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"=>"[email protected]", "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", "[email protected]"], ["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) 

答えて

0

10日後、解決策が提出の名前になりました。私は異なる名前の2つの提出物に名前を付けました。<%= f.submit "update"、名前: "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 
0

"editusers"のフォームのユーザーIDが管理者(またはログインしているユーザー)に設定されています。コードを見ることなく言うのは難しいですが、編集者のフォームを間違って設定したと思います。おそらく、更新したいユーザーのIDを保持する隠しフィールドを使用しています。

はそれを避けるために、あなたのビューIDのための任意の隠しフィールドなしform_for @user do |f|を使用して@user = User.find(10) 次に「editusers」アクションに@userオブジェクトを設定してください。

+0

ありがとうございました –

+0

私は助けてくれました! – meshpi

関連する問題