簡體   English   中英

Rails 4 update_all並從另一個字段設置值

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

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