Mongoid ukládá vložené dokumenty a hash atributy v podstatě stejným způsobem na úrovni databáze. Při práci s mongoidem je normální deklarovat pole ve vašich modelech, takže pokud máte vnořenou strukturu, je normální vytvořit vložený dokument. Protože MongoDB je mongoid bez schématu, potřebuje, abyste deklarovali pole, abyste je mohli prezentovat ve stejném druhu rozhraní API, jaké dělá ActiveRecord. Ale pro některé případy použití vám atribut Hash poskytuje trochu větší flexibilitu. Nevýhodou této flexibility je, že jste omezeni na Hash API, takže nezískáte automaticky generované metody atributů a nemůžete zapouzdřit obchodní logiku způsobem, který byste normálně dělali v rámci třídy modelu.
Předpokládejme například, že máte model dotazníku, ve kterém potřebujete uložit mnoho sekcí obsahujících mnoho dvojic otázka-odpověď. Pokud je klíčovým požadavkem systému, aby administrátor mohl nastavit nové sekce a otázky, pak byste nemohli snadno modelovat odpovědi jako běžný vložený dokument obsahující explicitní pole pro každou otázku. Pro takové věci může mít hash větší smysl.
Nevím, jaké jsou vaše konkrétní požadavky, ale jako hrubé vodítko bych řekl, že když pracujete s fixním schématem s vloženým dokumentem, ale když potřebujete model s otevřeným koncem, zvažte hash atributy.