用update_all和另一列更新列,但将值转换为数组



我有column_1(string),我创建了column_2(string),并将column_2序列化为数组

class Model < ActiveRecord::Base
serialize :column_2, Array
...

和我需要更新column_2与column_1值,像这样:

Model.update_all('column_2 = column_1')

但是因为我使用serialize作为数组的column_2,我需要保存所有值(字符串)从column_1数组

乌利希期刊指南。我试过.update_all('column_2 = (array[column_1]),但在这种情况下,无论如何,当我调用column_2时,我得到它作为字符串:

"{"value"}"

是的,可以使用下面的查询使用array_to_json正确转换为数组

Model.update_all("column_2 = (array_to_json(array[column_1]))")

不正确:-我不确定是否直接使用SQL转换列数据会在这里工作。Rails内置了序列化方法,可以在将数据推送到sql之前对其进行转换。因此,在sql级别将字符串转换为数组是不可能的。您需要迭代记录并更新每个记录,如下所示:-

model_instance.update('column_2 = ?', [column_1])