0

shop_idユーザーが追加ボタンをクリックしたときにユーザー を更新しようとしています。

呼び出されるコントローラ メソッドは次のとおりです。

def update_shop
  @user = User.find(params[:id])
  @shop = Shop.find(params[:shop_id])
  @user.update_attribute(:shop_id, params[:shop_id])
  flash[:success] = "Added Shop!"
  redirect_to @shop
end

ボタンがクリックされたときのサーバーは次のように読み取ります。

Started POST "/updateshop?id=3&shop_id=1" for ::1 at 2015-08-31 05:50:52 -0500
Processing by UsersController#update_shop as HTML
  Parameters: {"authenticity_token"=>"jRozldw1u3TrWhaL6CeJyw4Tm5V5S/IFEQQulRkuV1Ot85kmPOsMa2jH2L6m8EFDpy7Ygc9SMBvPLJCuosHXUg==", "id"=>"3", "shop_id"=>"1"}
  User Load (0.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1  [["id", 3]]
  Shop Load (0.1ms)  SELECT  "shops".* FROM "shops" WHERE "shops"."id" = ? LIMIT 1  [["id", 1]]
   (0.1ms)  begin transaction
  SQL (0.3ms)  UPDATE "users" SET "shop_id" = ?, "updated_at" = ? WHERE "users"."id" = ?  [["shop_id", 1], ["updated_at", "2015-08-31 10:50:52.089826"], ["id", 3]]
   (5.8ms)  commit transaction

しかし、実際には User.shop_id を更新しません。また、更新行がなく、次のように表示されることもあります。

Started POST "/updateshop?id=3&shop_id=1" for ::1 at 2015-08-31 05:56:54 -0500
Processing by UsersController#update_shop as HTML
  Parameters: {"authenticity_token"=>"D1ODlfDnhJmQ9NUfh+GL2JE747nJC2t4eqOziRGNCaUvuikmEDkzhhNpGyrJNkNQOAagrX8SqWakiw2yqmKJpA==", "id"=>"3", "shop_id"=>"1"}
  User Load (0.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1  [["id", 3]]
  Shop Load (0.1ms)  SELECT  "shops".* FROM "shops" WHERE "shops"."id" = ? LIMIT 1  [["id", 1]]
   (0.1ms)  begin transaction
   (0.1ms)  commit transaction

パラメータは正しく渡され、正しいと思いますupdate_attributeが、何が問題なのですか?

4

1 に答える 1

0

値は既に割り当てられているため、更新されません。つまり、実際の変更はありません。これが、UPDATE ステートメントが発行されなかった理由です。

于 2015-08-31T11:14:09.963 に答える