Из документов Mongoid я вижу, что если у меня есть следующий:Instantiate Mongoid подклассов по _Type поля
class Base
include Mongoid::Document
end
class InheritedA < Base
end
class InheritedB < Base
end
я могу сделать следующее, которые будут храниться с «_Type» атрибутом.
a = InheritedA.new
a.save
Mongoid создаст следующий документ.
{ _type: "InheritedA" }
Моя проблема заключается в том, что в дальнейшем у меня есть функция, которая имеет только значение _Type String, и я хотел бы создать экземпляр соответствующего типа. Я пробовал:
Base.new({ _type: mytype });
Однако Mongoid считает, что это динамический признак и отклоняет его. Я знаю, что включение динамических атрибутов - это не правильный курс, потому что я не хочу допускать такое поведение в общем случае.
Я хочу, чтобы избежать необходимости делать что-то вроде этого:
ob = nil
if mytype == "InheritedA"
ob = InheritedA.new
elsif
...
Кто-нибудь знает правильный метод для достижения этого?
Я думаю, что это работает как конструировано. Если вы хотите создать тип 'InheritedA', вы должны называть' InheritedA.new'. Но этот человек решил это, вызвав необработанное обновление MongoDB: http://stackoverflow.com/questions/5306646/how-to-change-a-documents-type-in-mongoid – GSP