У меня есть модель ActiveRecord с длинным строковым полем. На самом деле, эта строка представляет собой массив, который я хотел бы изменить на месте вместо копирования всей строки.
Например, скажем, Somemodel
имеет строковое поле array
. Тогда не удается сохранить следующее:
m = Somemodel.first
m.array[someindex] = somevalue
m.save
На самом деле, save
возвращает true, поскольку, кажется, проверяет, что array
имеет тот же object_id
, и решает, что модель не изменилась, и пропускает туда-обратно в базу данных.
Я использовал следующий обходной путь:
m = Somemodel.first
a = String.new(m.array) # remember, the array is represented as a string
a[someindex] = somevalue
m.array = a
m.save
Обратите внимание, что m.array
должен быть установлен после изменения его значения, потому что save
смотрит на значение, а не только object_id
.
Это кажется громоздким И требует, чтобы была скопирована вся строка. Не подходит для большого массива. Могу ли я сказать save
обойти эти проверки с измененной моделью без предшествующих проверочных тестов?