Le truc avec le champ Hash, c'est qu'il peut être dynamique autant que vous le souhaitez. Par conséquent, pour éviter de polluer votre schéma de base de données avec des champs involontaires causés par des bogues dans votre code, cette fonctionnalité est désactivée par défaut.
Non, vous n'êtes pas du tout obligé d'utiliser des mises à jour en 2 étapes pour vos hachages !
[],[]=sont les raccourcis pour read_attribute()
et write_attribute()
et doit être utilisé si vous n'incluez pas Mongoid::Attributes::Dynamic
. Si vous essayez d'utiliser $set
sans activer les attributs dynamiques, vous obtiendrez une erreur sans méthode car il ne voit pas vos attributs dynamiques comme des attributs définis.
Si vous lisez la source de Mongoid ::Attributs ::Dynamique alors vous constaterez que cela est nécessaire pour ajouter la fonctionnalité d'attributs dynamiques.
Pour mettre à jour les valeurs en incluant Mongoid::Attributes::Dynamic
vous devez suivre ces étapes :
thing = Thing.first
thing.set("info.endDate" => Time.now)
thing.reload # This will update the current variable
Sinon, si vous en avez besoin, vous pouvez facilement ignorer cela et effectuer la mise à jour de la valeur par la méthode en 2 étapes
J'espère que cela éclairera votre requête.
Origine :
Champs dynamiques mongoid Rails - aucune erreur de méthode
Attributs dynamiques avec Rails et Mongoid