![](/img/trans.png)
[英]Using Rails update_all method to update fields with value from another column
[英]Rails 4 update_all and set value from another field
我需要在某些模型中進行一些批量更新,並將一個字段的值設置為另一個字段的值。
現在,我可以使用原始sql來做到這一點:
ActiveRecord::Base.connection.execute("UPDATE `deleted_contents` SET `deleted_contents`.`original_id` = `deleted_contents`.`id` WHERE `deleted_contents`.`original_id` is NULL")
這工作正常,但是由於許多原因,我需要使用ActiveRecord查詢界面來執行此操作。 我試過了:
DeletedContent.where(original_id: nil).update_all(original_id: value_of_id_column)
對於value_of_id_column,我嘗試了:id,self.id, id
等,但沒有任何效果。 我應該為value_of_id_column設置什么以獲取由rails生成的原始查詢? 這是可能的,還是使用原始sql是唯一的解決方案?
另外,我也不想遍歷每條記錄並進行更新。 這對我來說不是有效的解決方案:
DeletedContent.where(original_id: nil).each do |deleted_content|
update_each_record
end
我很確定您無法通過將哈希傳遞給update_all來獲取該查詢。
最接近您想要獲得的是:
DeletedContent.where(original_id: nil).update_all("original_id = id")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.