2015-08-08 47 views
2

我需要在某些模型中执行一些批量更新并将字段的值设置为另一个字段的值。Rails 4 update_all并从另一个字段设置值

现在我可以做到这一点原始的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 

回答

5

我敢肯定你不能通过传递一个散列到update_all来获得该查询。

的最接近于要获得什么是:

DeletedContent.where(original_id: nil).update_all("original_id = id") 
相关问题