使用update_columns/update/update_attribute/update_all更新数据库资料

前言

我们可以通过使用update,update_columns,update_all,update_attribute来修改数据库中的资料

一、使用update_columns

  1. 查看一笔资料
p=Product.first
使用update_columns/update/update_attribute/update_all更新数据库资料_第1张图片
006tKfTcgy1fj1ms1augij313206macg.jpg

可以看出,该笔资料的description栏位的内容为空
接下来,更新description内容

  1. 更新该笔资料的description栏位中的内容
p.update_columns(description: "好吃")
p.save
使用update_columns/update/update_attribute/update_all更新数据库资料_第2张图片
006tKfTcgy1fj1mu553kej313207eab7.jpg
  1. 查看更新后的该笔资料内容


    006tKfTcgy1fj1munn0zlj312w04ydhl.jpg

可以看出,description栏位中的内容更新为"好吃"
使用update_columns方法时,其实并不需要额外使用save方法,就可以将数据库中的资料自动保存为修改后的数据。所以用不用save没有关系
使用update_columns方法,可以同时更新资料库中多个栏位的资料,比如:

p=Product.first
p.update_columns(title: "红树莓1",description: "酸甜可口")
p
使用update_columns/update/update_attribute/update_all更新数据库资料_第3张图片
006tKfTcgy1fj1t0zwgtsj312s08itbg.jpg

可以看出,可以看出该笔资料的title和description内容都修改了.

二、使用update

  1. 查看一笔资料
p=Product.first
使用update_columns/update/update_attribute/update_all更新数据库资料_第4张图片
006tKfTcgy1fj1sqcvax1j312o06k0v4.jpg
  1. 更新该笔资料的description栏位中的内容
p.update(description: "好吃")
p.save
使用update_columns/update/update_attribute/update_all更新数据库资料_第5张图片
006tKfTcgy1fj1srfadmwj312y0aa0uo.jpg
  1. 查看更新后的该笔资料内容
006tKfTcgy1fj1srzwxguj312g04swg7.jpg

可以看出,description栏位中的内容从"好吃"更新为"非常好吃"
使用update方法时,其实并不需要额外使用save方法,就可以将数据库中的资料自动保存为修改后的数据。所以用不用save没有关系
使用update方法,可以同时更新资料库中多个栏位的资料,比如:

p=Product.first
p.update(quantity: 50,price: 100)
p
006tKfTcgy1fj1sww0uzhj313204y409.jpg

可以看出该笔资料的quantity和price内容都修改了.

三、update_attribute

update_attribute的写法有所不同,一次只能修改一个栏位的内容

p= Product.first
p.update_attribute(:title, "草莓")
使用update_columns/update/update_attribute/update_all更新数据库资料_第6张图片
006tKfTcgy1fj1tk0ubskj312q08kq58.jpg

四、update_all

update_all()则是对类的操作,它会跳过验证和回调直接生成sql,并更改数据表的整列数据。
使用update_all可以对一列数据进行修改,也可以对多列数据进行修改;
(1)对一列数据修改

Product.update_all(:price => 100, :quantity => 99)
Product.update_all(price:  100, :quantity:  99)
Product.update_all("price => 100, quantity = 99")

三种写法是等价的,都可以将所有的product的price设置为100,quantity设置为99
另外,你可以搭配查询语句,只修改满足条件的资料的栏位,比如:

Product.where(:title =>"蓝莓").update_all("price = 300, quantity = 199")

它会将所有title为"蓝莓"的资料捞出来,并且将它们的price全部设置为300,quantity全部设置为199

补充:

1.update(), update_columns()和update_attribute()都是修改数据,并且功能类似,不同点在于:

  • update_column(s)直接生成sql操作数据库,跳过验证和回调.
  • update_attribute()只是跳过验证,但是依然会回调函数
  • update()则验证和回调都会执行
    值得一提的是,使用update,update_attribute等方法,由于它们会执行回调函数,因此如果它们和循环体组合在一起时,一定要有跳出循环的条件,否则就陷入了死循环。

2.对于update(), update_columns()和update_attribute(),你可以搭配查询语句,只修改满足条件的资料的栏位

参考资料:

update_column, update_attribute, update与update_all

你可能感兴趣的:(使用update_columns/update/update_attribute/update_all更新数据库资料)