[英]ActiveRecord Hash form to say update_all(“prio = prio + 200”)
我想通過update_all更改很多記錄的屬性。 用戶應該能夠相對地更改Prio(記錄1有Prio 0,記錄2有Prio 200,用戶可以選擇給他們+200,這樣他們分別以Prio 200和400結束)。 並同時更改其他列。 Rails中的首選方式是
Model.update_all(name: name)
但是對於prio,我只有我現在知道的字符串形式-
Model.update_all("prio = prio + #{change_of_prio}")
如何將后者更改為Hash形式的rails? 或者,如何在一個update_all
語句中做到這兩者(在使用Hash調用時不失去rails進行必要轉義的優勢)?
您必須使用數組符號。 這將工作:
Model.update_all(["prio = prio + :change_of_prio, name = :name", {change_of_prio: 200, name: "foo"}])
# UPDATE `models` SET prio = prio + 200, name = 'foo'
:change_of_prio
和:name
被命名為占位符,表示哈希中的相應值。 Rails為您處理轉義。
#update_all
可以應用於枚舉器,以設置或更新所有具有指定值的記錄。 例子 :
# Update all customers with the given attributes
Customer.update_all wants_email: true
# Update all books with 'Rails' in their title
Book.where('title LIKE ?', '%Rails%').update_all(author: 'David')
# Update all books that match conditions, but limit it to 5 ordered by date
Book.where('title LIKE ?', '%Rails%').order(:created_at).limit(5).update_all(author: 'David')
因此,在您的情況下,調用將使用相同的name
變量值更新所有記錄,該變量作為參數傳遞給函數。
Model.update_all(name: name) # all columnt named 'name' will have value of variable `name`
至於prio
:
prio = ...
change_of_prio = ...
Model.update_all(prio: "#{prio} #{change_of_prio}") # all columnt named 'prio' will have value of variable concat `prio` and `change_of_prio`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.