Одна из моих моделей имеет огромный текстовый столбец, который я хотел бы сжать перед сохранением его в базе данных (не для экономии места на диске, а потому, что я не хочу отправлять несжатое поле по проводам из мой сервер БД для моего сервера приложений)
Моя база данных postgresql, если это актуально
Вот расширение я пытался писать, но по каким-то причинам это не работает в производстве (данные на самом деле получить хранятся в базе данных выглядит как гекс (например, «34bee1c2d099ba21da3ac533d5f99cda2654feb73985430df39c5ffd8fbf9d9ff3aa9392d5a5» вместо вывода Zlib (например, «A \ xEB \ XD3 \ xF2Oy = \ x9C \ x7F5 \ xE9 \ xC44 \ x01M \ "). Не уверен, что происходит
module HasCompressedAttributes
def self.included(base)
base.extend ClassMethods
end
module ClassMethods
def has_compressed_attributes(*fields)
fields.each do |field|
define_method(:"#{field}=") do |uncompressed|
write_attribute(:"#{field}", Zlib::Deflate.deflate(uncompressed))
end
define_method(:"#{field}") do
Zlib::Inflate.inflate(read_attribute(:"#{field}")) rescue nil
end
end
end
end
end
ActiveRecord::Base.class_eval{ include HasCompressedAttributes }
Есть ли лучший подход здесь? Может быть, существующий драгоценный камень?