Grejen med Hash-fältet är att det kan vara dynamiskt hur mycket du vill. För att förhindra att ditt DB-schema förorenas med oavsiktliga fält orsakade av buggar i din kod är denna funktionalitet inaktiverad som standard.
Nej, du har inte fastnat med att använda tvåstegsuppdateringar för dina hash alls!
[],[]=är genvägarna för read_attribute()
och write_attribute()
och bör användas om du inte inkluderar Mongoid::Attributes::Dynamic
. Om du försöker använda $set
utan att aktivera dynamiska attribut kommer du att få ett fel utan metod eftersom det inte ser dina dynamiska attribut som definierade attribut.
Om du vill läsa källan till Mongoid::Attribut::Dynamiskt då skulle du upptäcka att detta krävs för att lägga till funktionen för dynamiska attribut.
För att uppdatera värdena genom att inkludera Mongoid::Attributes::Dynamic
du måste följa dessa steg:
thing = Thing.first
thing.set("info.endDate" => Time.now)
thing.reload # This will update the current variable
Annars om du behöver kan du enkelt hoppa över detta och göra värdeuppdateringen med tvåstegsmetoden
Jag hoppas att detta kastar lite ljus över din fråga.
Källa:
Rails-mongoida dynamiska fält – inget metodfel
Dynamiska attribut med Rails och Mongoid