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")
我需要在某些模型中进行一些批量更新,并将一个字段的值设置为另一个字段的值。
现在我可以像这样用原始 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")