Module ActiveModel::Serialization
In: lib/active_model/serialization.rb

Active Model Serialization

Provides a basic serialization to a serializable_hash for your object.

A minimal implementation could be:

  class Person

    include ActiveModel::Serialization

    attr_accessor :name

    def attributes
      {'name' => name}
    end

  end

Which would provide you with:

  person = Person.new
  person.serializable_hash   # => {"name"=>nil}
  person.name = "Bob"
  person.serializable_hash   # => {"name"=>"Bob"}

You need to declare some sort of attributes hash which contains the attributes you want to serialize and their current value.

Most of the time though, you will want to include the JSON or XML serializations. Both of these modules automatically include the ActiveModel::Serialization module, so there is no need to explicitly include it.

So a minimal implementation including XML and JSON would be:

  class Person

    include ActiveModel::Serializers::JSON
    include ActiveModel::Serializers::Xml

    attr_accessor :name

    def attributes
      {'name' => name}
    end

  end

Which would provide you with:

  person = Person.new
  person.serializable_hash   # => {"name"=>nil}
  person.as_json             # => {"name"=>nil}
  person.to_json             # => "{\"name\":null}"
  person.to_xml              # => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<serial-person...

  person.name = "Bob"
  person.serializable_hash   # => {"name"=>"Bob"}
  person.as_json             # => {"name"=>"Bob"}
  person.to_json             # => "{\"name\":\"Bob\"}"
  person.to_xml              # => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<serial-person...

Valid options are :only, :except and :methods .

Methods

External Aliases

send -> read_attribute_for_serialization
  Hook method defining how an attribute value should be retrieved for serialization. By default this is assumed to be an instance named after the attribute. Override this method in subclasses should you need to retrieve the value for a given attribute differently:
  class MyClass
    include ActiveModel::Validations

    def initialize(data = {})
      @data = data
    end

    def read_attribute_for_serialization(key)
      @data[key]
    end
  end

Public Instance methods

[Validate]