Chvíli mi to trvalo, ale našel jsem odpověď. Rozhodl jsem se to zveřejnit v naději, že to pomůže ostatním.
Mongoid implementuje něco, čemu se říká „dědičnost jedné tabulky“. Jakmile odvodíte podřízenou třídu z nadřazené třídy, podřízená třída bude uložena v nadřazené kolekci přidáním atributu „type“. Použití "store_in" řekne mongodb explicitně, do které kolekce má ukládat dokumenty. Definování store_in v podřízené třídě způsobí, že mongoid uloží vše (včetně rodiče) v dané kolekci. Myslím, že použití vyhrazených přiřazení store_in pro každé dítě zkazí mongoidy. Výsledkem však je, že se dokumenty ukládají náhodně do kterékoli z daných sbírek.
To lze vyřešit v Ruby pomocí modulu jako mixinu pro běžnou funkčnost. To je docela dobře popsáno v tento dokument .
ALE rozhodl jsem se to přece neudělat! Důvodem, proč jsem to chtěl, je udržet mé sbírky malé a doufat v lepší výkon. Po rozhovoru s některými (10gen) odborníky si myslím, že lepším přístupem je použití jediné rodičovské kolekce objektů pro všechny podřízené prvky. Nemělo by to mít žádný dopad na výkon mongodb, ale řešení se stává mnohem flexibilnější. Ve skutečnosti to mnohem lépe využívá bezschemaless design v mongodb.
Takže kód bude vypadat znovu takto:
class BaseClass
include Mongoid::Document
... shared functionality
end
class ChildClass1 < BaseClass
...individual functionality...
end
class ChildClass2 < BaseClass
...individual functionality...
end