4

Existe-t-il un moyen d'initialiser automatiquement les documents incorporés lors de la construction dans mongoid? Ce que je veux dire est donné à l'utilisateur qui intègre un document de garage. Je dois écrire le code suivant pour entièrement configurer l'utilisateur avec le garage:Mongoid: initialisation automatique des documents incorporés lors de la construction du parent

user = User.create!(name: "John") 
user.build_garage 
user.garage.cars << Car.create!(name: "Bessy") 

Est-il possible que je peux sauter appeler user.build_garage?

Merci

Répondre

6

Vous pouvez ajouter un rappel au modèle de l'utilisateur comme ceci:

class User 
    ... 
    after_initialize do |u| 
    u.build_garage unless u.garage 
    end 
    ... 
end 

Ce feu de rappel après chaque instanciation de la classe, donc il se déclenche après « trouver » et « nouveaux ».

+0

Est-ce que tirer après trouver une bonne idée parce que cela ne signifie pas qu'il écrasera le document incorporé précédent? – GTDev

+0

Y a-t-il des autos mongoïdes qui le font pour l'utilisateur? – GTDev

+0

J'ai édité la réponse pour fixer votre premier point. Non, il n'y a pas d'automatismes pour ça. Je dirais que cette fonctionnalité appartient au code d'application réel. – moritz

11

Mongoid 3 a autobuild option qui indique à Mongoid d'instancier un nouveau document lorsque la relation est accédée et il est nil.

embeds_one :label, autobuild: true 
has_one :producer, autobuild: true 
Questions connexes