使用update_columns/update/update_attribute/update_all更新數據庫資料

前言

我們可以通過使用update,update_columns,update_all,update_attribute來修改數據庫中的資料

一、使用update_columns

  1. 查看一筆資料
p=Product.first
006tKfTcgy1fj1ms1augij313206macg.jpg

可以看出,該筆資料的description欄位的內容為空
接下來,更新description內容

  1. 更新該筆資料的description欄位中的內容
p.update_columns(description: "好吃")
p.save
006tKfTcgy1fj1mu553kej313207eab7.jpg
  1. 查看更新后的該筆資料內容


    006tKfTcgy1fj1munn0zlj312w04ydhl.jpg

可以看出,description欄位中的內容更新為"好吃"
使用update_columns方法時,其實并不需要額外使用save方法,就可以將數據庫中的資料自動保存為修改后的數據。所以用不用save沒有關系
使用update_columns方法,可以同時更新資料庫中多個欄位的資料,比如:

p=Product.first
p.update_columns(title: "紅樹莓1",description: "酸甜可口")
p
006tKfTcgy1fj1t0zwgtsj312s08itbg.jpg

可以看出,可以看出該筆資料的title和description內容都修改了.

二、使用update

  1. 查看一筆資料
p=Product.first
006tKfTcgy1fj1sqcvax1j312o06k0v4.jpg
  1. 更新該筆資料的description欄位中的內容
p.update(description: "好吃")
p.save
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, "草莓")
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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容