Die Sache mit dem Hash-Feld ist, dass es so dynamisch sein kann, wie Sie möchten. Um zu verhindern, dass Ihr DB-Schema mit unbeabsichtigten Feldern verschmutzt wird, die durch Fehler in Ihrem Code verursacht werden, ist diese Funktionalität daher standardmäßig deaktiviert.
Nein, Sie müssen überhaupt keine 2-Schritt-Updates für Ihre Hashes verwenden!
[],[]=sind die Abkürzungen für read_attribute()
und write_attribute()
und sollte verwendet werden, wenn Sie Mongoid::Attributes::Dynamic
nicht einschließen . Wenn Sie versuchen, $set
zu verwenden ohne dynamische Attribute zu aktivieren, erhalten Sie einen No-Method-Fehler, da Ihre dynamischen Attribute nicht als definierte Attribute angesehen werden.
Wenn Sie die Quelle von Mongoid lesen:Attribute::Dynamisch dann würden Sie feststellen, dass dies erforderlich ist, um die Funktionalität für dynamische Attribute hinzuzufügen.
Zum Aktualisieren der Werte durch Einschließen von Mongoid::Attributes::Dynamic
Sie müssen diesen Schritten folgen:
thing = Thing.first
thing.set("info.endDate" => Time.now)
thing.reload # This will update the current variable
Andernfalls können Sie dies bei Bedarf einfach überspringen und die Wertaktualisierung mit der 2-Schritt-Methode durchführen
Ich hoffe, das bringt etwas Licht in Ihre Frage.
Quelle:
Rails mongoide dynamische Felder - kein Methodenfehler
Dynamische Attribute mit Rails und Mongoid