簡體   English   中英

ActiveRecord哈希表,表示update_all(“ prio = prio + 200”)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM