Ruby on rails 更新Rails控制器中的属性

Ruby on rails 更新Rails控制器中的属性,ruby-on-rails,ruby,update-attributes,update-attribute,Ruby On Rails,Ruby,Update Attributes,Update Attribute,我试图在用户单击“添加”按钮时更新其店铺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 单击按钮时,服务器显示: S

我试图在用户单击“添加”按钮时更新其店铺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\u 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_属性正确,出了什么问题?

该值已被分配,这就是它未被更新的原因。我的意思是,没有实际的更改,这就是为什么没有发布更新语句。

该值已经分配,这就是为什么它没有更新。我的意思是,没有实际的更改,这就是为什么没有发布更新语句。即使有默认值,我也不能更新它吗?我将其默认值设置为0。看起来您正在重新分配相同的值。这就是为什么没有发出UPDATE语句的原因。shop_id的默认值是0,所以我删除了该默认值,它就正常工作了。谢谢。用什么来代替update_属性来更改已经存在的值?例如,用户选择一家店铺,其店铺id=1。然后他们选择切换到另一个店铺,所以店铺id需要更新为2?更新店铺id属性是更新店铺id的方法。您的代码看起来是正确的。