class ActiveResource::Coder

Integrates with Active Record’s serialize method as the :coder option.

Encodes Active Resource instances into a value to be stored in the database. Decodes values read from the database into Active Resource instances.

class User < ActiveRecord::Base
  serialize :person, coder: ActiveResource::Coder.new(Person)
end

class Person < ActiveResource::Base
  schema do
    attribute :name, :string
  end
end

user = User.new
user.person = Person.new name: "Matz"
user.person.name # => "Matz"

Values are loaded as persisted when decoded from data containing a primary key value, and new records when missing a primary key value:

user.person = Person.new
user.person.persisted? # => true

user.person = Person.find(1)
user.person.persisted? # => true

By default, dump serializes the instance to a string value by calling Base#encode:

user.person_before_type_cast # => "{\"name\":\"Matz\"}"

To customize serialization, pass the method name or a block as the second argument:

person = Person.new name: "Matz"

coder = ActiveResource::Coder.new(Person, :serializable_hash)
coder.dump(person) # => { "name" => "Matz" }

coder = ActiveResource::Coder.new(Person) { |person| person.serializable_hash }
coder.dump(person) # => { "name" => "Matz" }