модуль ActiveRecord::AttributeMethods::Serialization::ClassMethods
Открытые методы экземпляра
Если у вас есть атрибут, который нужно сохранить в базе данных как объект и извлечь в качестве того же объекта, укажите имя этого атрибута с помощью этого метода, и он будет обрабатываться автоматически. Сериализация выполняется через YAML. Если class_name указано, сериализованный объект должен быть того класса при извлечении, или будет поднято SerializationTypeMismatch.
Заметным побочным эффектом сериализованных атрибутов является то, что модель будет обновляться при каждом сохранении, даже если она не изменёна.
Параметры
-
attr_name- Имя поля, которое должно быть сериализовано. -
class_name_or_coder- Необязательно, объект кодера, который отвечает на `.load` / `.dump` или имя класса, которому должен соответствовать тип объекта.
Пример
# Serialize a preferences attribute. class User < ActiveRecord::Base serialize :preferences end # Serialize preferences using JSON as coder. class User < ActiveRecord::Base serialize :preferences, JSON end # Serialize preferences as Hash using YAML coder. class User < ActiveRecord::Base serialize :preferences, Hash end
# File activerecord/lib/active_record/attribute_methods/serialization.rb, line 52
def serialize(attr_name, class_name_or_coder = Object)
include Behavior
# When ::JSON is used, force it to go through the Active Support JSON encoder
# to ensure special objects (e.g. Active Record models) are dumped correctly
# using the #as_json hook.
coder = if class_name_or_coder == ::JSON
Coders::JSON
elsif [:load, :dump].all? { |x| class_name_or_coder.respond_to?(x) }
class_name_or_coder
else
Coders::YAMLColumn.new(class_name_or_coder)
end
# merge new serialized attribute and create new hash to ensure that each class in inheritance hierarchy
# has its own hash of own serialized attributes
self.serialized_attributes = serialized_attributes.merge(attr_name.to_s => coder)
end Возвращает хеш всех атрибутов, которые были указаны для сериализации в качестве ключей и их ограничение класса в качестве значений.
# File activerecord/lib/active_record/attribute_methods/serialization.rb, line 20
© 2004–2016 David Heinemeier Hansson
Licensed under the MIT License.