Rails 3: Générer des codes uniques (coupons)
Quelle est la meilleure façon de générer des codes uniques à utiliser que les codes de coupon?
Grâce.
Nom? Je veux dire, l'homme a de concieve du coupon et ce qu'il fait. Avoir un nom. Juste assurez-vous que le nom n'a pas été utilisé avant.
double possible de Génération unique, difficile à deviner "coupon codes
double possible de Génération unique, difficile à deviner "coupon codes
OriginalL'auteur donald | 2010-12-29
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire quelque chose comme ceci:
Mais alors, vous auriez à comparer à une base de données pour s'assurer qu'il n'est pas encore utilisé.
De ici.
réalisé et changé - j'ai confondu entre les questions
Cela ne ressemble pas à ruby 😉
eh bien, c'est..... je l'ai fait plus joli (toujours à partir de ce lien)
Vous devez utiliser
ActiveSupport::SecureRandom
pour cela, plutôt que de coder votre propre fonctionnalité.OriginalL'auteur zsalzbank
En Ruby de la bibliothèque standard, il est
SecureRandom
pour cela:La durée de la sortie est le double de ce que l'entrée de la longueur spécifiée.
Retiré de rails 3.2 - utilisation, tout simplement SecureRandom de stdlib. voir github.com/plataformatec/devise/pull/1087
Mise à jour de la réponse à la refléter.
OriginalL'auteur Ryan Bigg
Ce que vous voulez est de générer un GUID. Voir ici:
générateur de guid en ruby
pouvez-vous me montrer un exemple?
Lorsque vous achetez quelque chose de groupon, vous obtenez un code pour utiliser le service. Il s'agit essentiellement de nombres aléatoires et des lettres, je crois, mais pas deux codes peuvent être les mêmes.
combien de temps est-il?
donc qu'est ce qu'un GUID est - il suffit de se débarrasser de la
-
's de la chaîneOriginalL'auteur zsalzbank
Peut-être essayer ceci, semble être la preuve de plus que de simplement générer un clé aléatoire.
Ils disent: UUID générateur pour produire universellement identificateurs uniques basé sur la RFC 4122 (http://www.ietf.org/rfc/rfc4122.txt).
http://rubygems.org/gems/uuid
Dans votre code
Référence: http://railsforum.com/viewtopic.php?id=12616#p44545
OriginalL'auteur dombesz
Si vous ne voulez pas perdre de comparer par rapport à la base de données (pas une super opération coûteuse), vous pouvez garantir que le Temps est toujours unique, car il se produit seulement une fois
Sauf si vous combinez-le avec le nom de l'utilisateur ou id vous feriez courir le risque de la course à conditions - deux processus générant la même heure/code promo pour les différents utilisateurs. Il serait rare, mais possible et très difficiles à déboguer. Essayez
md5(current_user.id.to_s + Time.now.to_i.to_s+Time.now.usec.to_s)
à la place.Le temps n'est pas unique. Voir l'Heure d'été; vous obtenez un ensemble de heure de heure répétée une fois par an. Et puis il y a la question de pouvoir changer le système de l'horloge. Utiliser un GUID/UIID
OriginalL'auteur sethvargo
Remarque: Il n'est une même question
Récemment, j'ai écrit coupon code gem qui fait exactement la même chose. L'algorithme emprunté de l'Algorithme::CouponCode module CPAN.
Un code de coupon ne doit pas seulement être unique, mais aussi facile à lire et le type de bien qu'il est sécurisé. Neil l'explication et la solution est grande. Ce bijou offre un moyen pratique de le faire et un bonus de validation de fonction.
OriginalL'auteur baxang