2017-10-18 55 views
2

J'ai une application Rails 4.2.8 qui utilise Mongoid 5.2.0. Je veux mettre à jour un enregistrement sans mettre à jour la base de données. Fondamentalement, je veux imiter User.new(user_params), mais à la place pour la mise à jour.Mongoid - Affecter des attributs sans enregistrer

Maintenant, ActiveRecord a la méthode assign_attributes, mais la version Mongoid semble mettre à jour la base de données quand même! Est-ce un bug ou existe-t-il une autre méthode qui sert ce but?

+0

J'utilise Rails 5.1.3 et 6.2.1 MongoId. Un objet nouvellement instancié peut recevoir un hachage d'attributs assignés tout en restant un .new_record? Ekkstein

+0

Oui, c'est pour un nouvel enregistrement. Je veux mettre à jour un enregistrement existant en mémoire sans réellement enregistrer ces modifications dans la base de données (pour le moment). –

Répondre

0

Identique à @Ekkstein - fonctionne pour moi sur un nouveau Mongoid que le demandeur utilisé.

Docs ont une méthode update_attributes comme vu sur https://mongoid.github.io/old/en/mongoid/docs/persistence.html#standard et assign_attributes fonctionne sans enregistrer.

Si tout cela échoue, essayez

class User # apply attributes one by one def silly_update_attributes(attributes) attributes.each_pair do |k,v| self[k] = v end end end