2012-01-07 4 views
0

J'essaie d'écrire un exemple d'application en utilisant Ruby on Rails et le mappeur Mongoid.Mongoid créer de nouveaux utilisateurs

Pour une sorte de test, je veux écrire 1000 Testusers dans MongoDB ...

Avec le code bolow MongoId n'est pas capable d'écrire uid uniques. Dans ma console de rubis j'ai eu le bon numéro pour le compteur mais pas pour l'uid.

Est-ce que quelqu'un sait ce que j'ai oublié?

class User 

    include Mongoid::Document 
    include Mongoid::Timestamps 

    def self.create_users 
    (1..1000).each do |f| 
     user = User.new(uid: f.to_s, first_name: "first_name", last_name: "last_name", e_mail: "e_mail") 
     user.save! 
     puts f 
     puts user.uid 
    end 
    end 

    field :uid, :type => String 
    field :first_name, :type => String 
    field :last_name, :type => String 
    field :e_mail, :type => String 
    field :messages, :type => String 

    attr_accessible :first_name, :last_name, :e_mail 
    validates_presence_of :uid, :first_name, :last_name, :e_mail 
    validates_uniqueness_of :uid 

    has_many :messages 
end 

Répondre

0

Vous n'avez pas besoin de fournir le champ UID dans vos modèles. MongoId ajoute le champ id pour vous et gère la valeur pendant l'opération de création. Supprimez simplement le champ: uid,: type => Chaîne du modèle

+0

oui merci, mais ce n'est certainement pas le genre d'index que je veux utiliser ... par exemple: 4f08d13945a36b20370048bf est l'identifiant du dernier utilisateur que j'ai inséré ... merci pour votre réponse, mais savez-vous pourquoi cela se produit? ? – user934801

+0

Que voulez-vous dire par "pas le genre d'index que je veux utiliser." ? MongoDb utilise le type ObjectId comme "clé primaire" de ses "enregistrements", donc MongoId utilise le même type. – ema

0

Si vous souhaitez utiliser vos propres identifiants, vous pouvez remplacer le nom du champ UID par _id et cela devrait fonctionner correctement. Cependant, le mongo _id généré par défaut le rendra plus facile à mettre à l'échelle et son utilisation supprimera l'un des aspects les plus difficiles du sharding si vous en avez besoin. Si vous souhaitez utiliser ceux qui sont générés par défaut, ils sont inclus automatiquement sauf s'ils sont remplacés explicitement (comportement que vous avez vu), il suffit donc de supprimer votre champ personnalisé et vous devriez tous être définis.

Vous pouvez en savoir plus sur ObjectIds here.

Questions connexes