Je souhaite générer des noms d'utilisateur uniques et anonymes lors de la création d'une instance de mon modèle Utilisateur. Idéalement, il serait défini par défaut si je ne spécifie aucun nom d'utilisateur. Donc, par exemple, quand je fais User.create!(), J'aimerais que la colonne username soit 'anonymous123', où 123 est un nombre unique tiré d'une séquence (la valeur de la colonne id pour cela exemple serait ok).Comment générer des noms d'utilisateur anonymes uniques dans RoR?
Répondre
En combinant les exemples de quelques réponses le ferait
class User < ActiveRecord::Base
before_create :set_anonymous_username
def set_anonymous_username
username = "anonymous#{User.last.id + 1}" if username.nil?
end
end
J'ai utilisé before_create ici parce que je vous attendre que d'avoir à définir un nom d'utilisateur anonyme avant de créer l'utilisateur pour la première fois . Le before_save sera appelé à chaque fois que le modèle est sauvé et pourrait être un surcoût inutile, mais soit fonctionnera
Utilisez un filtre before_save pour définir le nom d'utilisateur avant l'enregistrement du modèle, par ex.
class User < ActiveRecord::Base
before_save :set_anonymous_username
def set_anonymous_username
username = "anonymous" + User.find_by_sql("SELECT max(id) FROM users").maxid.to_s if username.nil?
end
end
plain SQL est une douleur dans le cul si vous voulez changer votre base de données ;-) –
Ouais, n'était pas au courant d'une meilleure façon d'obtenir le dernier ID d'un modèle de rails ... et maintenant je le fais :) – workmad3
Quelque chose comme
class User < ActiveRecord::Base
def initialize
super
self.username = "anonymous#{User.last.id + 1}"
end
end
Est-ce que faire lorsque vous créez une nouvelle instance de l'utilisateur, même avant qu'il ne soit sauvé - dans le cas où vous voulez l'utiliser dans une vue pré-création. Vous voudrez probablement le combiner avec quelque chose before_save comme mentionné ci-dessus pour obtenir le dernier identifiant définitif dans la base de données au moment de la création de l'enregistrement.
surcharger la méthode initialize d'un objet ActiveRecord n'est pas recommandé, surtout si vous n'appelez pas super, vous pouvez regarder le after_initialize rappel de le faire –
gah totalement oublié super :) merci. – zackola
- 1. Générer des couleurs uniques
- 2. Dans Visual Studio, existe-t-il un moyen de générer automatiquement des noms de méthode uniques?
- 3. Création de noms d'utilisateur uniques
- 4. Comment puis-je générer des valeurs uniques dans le préprocesseur C?
- 5. Dans zsh, comment transmettre des tableaux anonymes dans des fonctions?
- 6. comment obtenir des éléments uniques?
- 7. Comment sélectionner des nœuds uniques
- 8. Comment créer des identifiants uniques en Perl?
- 9. Quand les données d'espace de noms anonymes sont-elles initialisées?
- 10. Générer des noms de fichiers automatiquement sans collision
- 11. Utilise des espaces de noms anonymes dans les fichiers d'en-tête
- 12. Comment trouver des bogues webrick dans NetBeans pour Ror?
- 13. Comment générer des variables d'URL uniques qui correspondent à un enregistrement db?
- 14. Passer des types anonymes dans ASP.NET MVC
- 15. Les noms de contrôleurs doivent-ils être uniques même lorsqu'ils se trouvent dans des zones distinctes?
- 16. Comment travailler avec des utilisateurs anonymes dans ASP.NETMembership
- 17. Comment générer des données à partir de tables avec les mêmes noms de colonne dans CodeIgniter?
- 18. Comment générer des documents XML avec espaces de noms dans Python
- 19. Comment: activer les enquêtes anonymes dans sharepoint
- 20. Créer des identifiants uniques dans VFP
- 21. le code le plus rapide pour générer des hachages base62 uniques
- 22. comment générer des URLs conviviales dans Joomla?
- 23. AS3 - Comment attribuer des noms ou des étiquettes au chargeur?
- 24. Meilleure façon de générer des identifiants uniques côté client (avec Javascript)
- 25. Comment puis-je générer des zéros en tête dans Ruby?
- 26. Comment créer des associations RoR Factory avec accept_nested_attributes_for?
- 27. Implémentation de Captcha dans ROR
- 28. Comment générer des partitions entières?
- 29. RoR: Marquer des tags avec d'autres tags
- 30. Impossible d'obtenir des valeurs uniques
Je voudrais également ajouter un "validates_uniqueness_of: nom d'utilisateur" dans votre modèle d'utilisateur, juste pour être sûr. Il peut aussi payer pour vérifier le nom d'utilisateur généré automatiquement pour s'assurer qu'il n'y a pas de conflits, ou le client peut obtenir des erreurs bizarres et ne pas savoir pourquoi. – askegg