Вас могут заинтересовать методы Array.pack и String.unpack. См. Документацию ruby для этого: введите ri Array.pack
Возможно, вы захотите использовать атрибут «pack_data» в своей базе данных, а затем добавить средства доступа для его упаковки / распаковки:
def data
packed_data.unpack('....')
end
def data=(v)
self.packed_data = v.pack('....')
end
Чтобы сделать его более полезным, вы можете сохранить распакованную форму в переменной, но вы должны не забыть очистить ее при изменении атрибута packed_data
, например, когда вы вызываете .reload
before_validation :pack_data
UNPACK_FORMAT = '.....' # See ri Array.pack
def data
@data ||= packed_data.unpack(UNPACK_FORMAT)
end
def data=(v)
@data = v
end
def reload(options=nil)
@data = nil
super
end
def pack_data
self.packed_data = self.data.pack(UNPACK_FORMAT)
true # Because we are in a before_.. callback
end
Формат магической строки, используемой для упаковки / распаковки данных, зависит от данных, имеющихся в вашем массиве. Документация поможет вам выбрать правильный.
Я считаю, что формат для pack и unpack будет одинаковым, но не слишком доверяйте мне. ;)