Il problema con il campo Hash è che può essere dinamico quanto vuoi. Pertanto, per evitare di inquinare il tuo schema DB con campi non intenzionali causati da bug nel tuo codice, questa funzionalità è disabilitata per impostazione predefinita.
No, non sei affatto bloccato nell'usare gli aggiornamenti in 2 passaggi per i tuoi hash!
[],[]=sono le scorciatoie per read_attribute()
e write_attribute()
e dovrebbe essere usato se non includi Mongoid::Attributes::Dynamic
. Se provi a usare $set
senza abilitare gli attributi dinamici otterrai un errore senza metodo perché non vede i tuoi attributi dinamici come attributi definiti.
Se leggi la fonte di Mongoid::Attributi::Dinamico quindi scopriresti che questo è necessario per aggiungere la funzionalità degli attributi dinamici.
Per aggiornare i valori includendo Mongoid::Attributes::Dynamic
devi seguire questi passaggi:
thing = Thing.first
thing.set("info.endDate" => Time.now)
thing.reload # This will update the current variable
Altrimenti, se necessario, puoi facilmente saltare questo ed eseguire l'aggiornamento del valore con il metodo in 2 passaggi
Spero che questo faccia luce sulla tua domanda.
Fonte:
Campi dinamici mongoidi Rails - nessun errore di metodo
Attributi dinamici con Rails e Mongoid