Похоже, вы действительно хотите использовать встроенные документы .
class Item
include MongoMapper::Document
key :name, String
one :options, :class_name => "Option"
end
class Price
include MongoMapper::EmbeddedDocument
key :value, Float
key :currency, String
belongs_to :option
end
class Option
include MongoMapper::EmbeddedDocument
key :weight, Float
one :price
belongs_to :item
end
В монго это будет храниться как:
{
"_id" => BSON::ObjectId('4d9bf8e8516bcb45ec000001'),
"name" => "name",
"options" => {
"_id" => BSON::ObjectId('4d9bf92a516bcb45ec000002'),
"weight" => 1.0,
"price" => {
"_id" => BSON::ObjectId('4d9bfa04516bcb45ec000003'),
"value" => 1.0,
"currency" => "rubies"
}
}
}
Или, если вы на самом деле запрашиваете надуманный пример для пользовательского типа (взгляните на пример) , вы можете просто сохранить эту структуру как Hash и просто загрузить все это в Составьте , OpenStruct или просто бросьте свой собственный класс.