Spec-Zone.ru › Ruby on Rails 4.1

модуль ActiveRecord::AttributeMethods::Serialization::ClassMethods

Открытые методы экземпляра

serialize(attr_name, class_name_or_coder = Object) Показать исходный код

Если у вас есть атрибут, который нужно сохранить в базе данных как объект и извлечь в качестве того же объекта, укажите имя этого атрибута с помощью этого метода, и он будет обрабатываться автоматически. Сериализация выполняется через 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
serialized_attributes() Показать исходный код

Возвращает хеш всех атрибутов, которые были указаны для сериализации в качестве ключей и их ограничение класса в качестве значений.

# File activerecord/lib/active_record/attribute_methods/serialization.rb, line 20
        

© 2004–2016 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API