Предположим, у меня есть базовый класс модели Item
class Item
include Mongoid::Document
field :category
end
Каждая категория определяет, какие поля должен содержать элемент.Например, элементы в «category1» должны содержать дополнительное строковое поле с именем text
, элементы в «category2» должны содержать поля weight
и color
.Все поля имеют базовые типы: строки, целые числа и т. Д.
Эти дополнительные значения должны храниться в mongodb как поля документа:
> db.items.find()
{ "_id" : ObjectId("4d891f5178146536877e1e99"), "category" : "category1", "text" : "blah-blah" }
{ "_id" : ObjectId("4d891f7878146536877e1e9a"), "category" : "category2", "weight" : 20, "color" : "red" }
Категории хранятся в mongodb,тоже.Конфигурация полей определяется во время выполнения администратором.
> db.categories.find()
{ "_id" : "category1", "fields" : [ { "name" : "text", "type" : "String" } ] }
{ "_id" : "category2", "fields" : [
{
"name" : "weight",
"type" : "Integer"
},
{
"name" : "color",
"type" : "String"
}
] }
Пользователи должны редактировать элементы с помощью HTML-форм, вводя значения для всех дополнительных полей, определенных для категории конкретного элемента.
Вопросis
Какие подходы я могу использовать для реализации этого полиморфизма на рельсах?
Пожалуйста, запросите необходимые подробности с комментариями.