Первый: второй аргумент для сериализации должен быть классом объекта, который вы храните в поле. Вы должны иметь serialize :query_data, Hash
вместо.
Кроме того, на самом деле не существует каких-либо передовых методов работы с сериализованными данными. Это действительно слишком сильно зависит от структуры ваших данных. Вы также можете спросить: «Каков наилучший способ добавить или удалить элемент из хэша?»
Но так как это хеш, вы должны помнить грязные атрибуты . Если бы вы сделали что-то вроде:
items = my_model.query_data[:items]
items.reject! {|item| item[:id] == 2}
items += {id: 4}
тогда модель не будет знать, что query_data изменилась, и ее следует обновить при сохранении.
my_model.changed?
# => false
my_model.save
# Won't actually save changes to db.
Чтобы избежать этого, вы можете:
А) Убедитесь, что вы только когда-либо устанавливали my_model.query_data напрямую
B) Явно позвоните my_model.query_data_will_change!
после изменения этого поля, чтобы оно было должным образом обновлено при сохранении.