class Address # Our custom, embedded-value type accessor :address => String accessor :address_2 => String accessor :city => String accessor :state => String accessor :zip_code => String orm.map_type do |signature, types| signature.from [self] signature.typecast_left method(:__load__) signature.to [types.string, types.string, types.string, types.string, types.string] signature.typecast_right method(:__dump__) end end class Zoo accessor :id => Integer accessor :name => String accessor :address => Address orm.map(self, "zoos") do |zoos, type| zoos.field :id, type.serial zoos.field :name, type.string(200) zoos.field :address, type.string(200, "address_address_1"), type.string(100, "address_address_2"), type.string(100, "address_city"), type.string(50, "address_state"), type.string(50, "address_zip_code") end end