Ruby on Rails - Valider un Coût
Quel est le meilleur moyen de valider un coût/prix d'entrée par un utilisateur, les règles de validation ci-dessous:
- Exemples de formats autorisés .23, .2, 1.23, 0.25, 5, 6.3 (maximum de deux chiffres après le point décimal)
- Valeur minimale de 0,01
- Valeur maximale de 9,99
- Ce qui se comportent voulez-vous si un utilisateur entre 4.555 ? L'échec? ou couper le supplément de 5?
- Besoin à l'échec.
Vous devez vous connecter pour publier un commentaire.
Vérifiez le prix et vérifier le format
:greater_than => 0
. Si le champ de base de données est par exemple un nombre décimal avec une précision de 2, la validation permettra toujours d'une valeur de 0.00001, qui sera enregistrée dans le tableau 0.:greater_than => 0
pour @Majiy la raison mentionnée ci-dessus, utilisez plutôt:greater_than_or_equal_to => 0.01
.nil
pour plus de 2 décimales:/\A\d+(?:\.\d{0,2})?\z/
/\A\d+(\.\d{0,2})?\z/
. Est-il un cas limite, je suis absent?Pour le côté client validations, vous pouvez utiliser un plugin jQuery comme cette une qui vous permet de définir différents formats valides pour une entrée donnée.
Pour le côté serveur de validation et selon ce question/réponse peut-être devriez-vous utiliser un
decimal
colonne pourprice
dans laquelle vous pouvez définir des valeurs pourprecision
etscale
,scale
résout les deux chiffres après le point décimal restriction.Puis de valider le numericality, la valeur minimale et maximale, vous pouvez utiliser la méthode de validation:
:greater_than => 0
pour la raison @Majiy mentionné, utilisez plutôt:greater_than_or_equal_to => 0.01
.Vous pouvez créer des validations.Disons, par exemple le deuxième cas:
Plus sur cette, dans les Rails Guides, ici.
validates :price, :numericality => { :greater_than => 0.01, :allow_blank => true }
. Même avec la première validation: la validation de la contre une Regexp, qui Rails fournit déjà à l'aide devalidates :price, :format => ...