2010-05-21 3 views
2

Je commence à peine dans Rails et j'essaie de développer une application simple. Je dois valider trois valeurs soumises à l'application - chacune doit répondre aux mêmes critères de validation. La validation est assez simple: La valeur est valide si unqiue, null ou égal à "p" ou "d".Utilisation de la validation de l'unicité des rails sauf dans les rails

Ce qui suit me fait à mi-chemin:

validates_uniqueness_of :value1, :value2, :value3, :allow_nil => true 

Je pense que je peux utiliser: à moins de vérifier si la valeur est soit « p » ou « d », mais je ne peux pas comprendre comment.

Je suppose que j'essaie de combiner validates_uniqueness_of avec validates_inclusion_of.

Des suggestions?

Répondre

2

Il y a plusieurs façons de le faire. Je serais probablement aller avec quelque chose comme ceci:

validates_uniqueness_of :wallport_id, :allow_nil => true, :unless Proc.new { |u| u.wallport_id == 'p' or u.wallport_id == 'd' } 

Vous pouvez aussi briser la logique supplémentaire dans sa propre méthode, comme ceci:

validates_uniqueness_of :wallport_id, :unless :has_nonunique_wallport_id 

NONUNIQUE_WALLPORT_IDS = ['p', 'd', nil] 

def has_nonunique_wallport_id 
    NONUNIQUE_WALLPORT_IDS.include? wallport_id 
end 

ou pousser toute validation à sa propre méthode, comme ceci:

validate :has_valid_wallport_id 

def has_valid_wallport_id 
    # check wallport id and return either true or false 
end 

La meilleure approche dépend probablement de ce qui vous semble le plus lisible, quelle fonctionnalité vous voudrez peut-être exposer à d'autres parties de votre code (par exemple, quelqu'un d'autre besoin de savoir à propos des identifiants de wallport non uniques valides?), et quelles sont les choses que vous attendez pourraient changer (par exemple, allez-vous ajouter plus d'identifiants non-uniques valides plus tard?). Il existe également différentes façons de procéder à la vérification, ce qui revient à ce que vous jugez le plus lisible et à la façon dont vous pensez que le système pourrait évoluer.

+0

Excellent - J'ai mis à jour la question au moment où vous avez répondu, pour spécifier que je voulais valider un certain nombre de variables de la même manière - Je pense que votre solution fonctionne bien si je définis une validation pour chaque variable. . Merci beaucoup. Je me cognais la tête contre celui-là. – dunxd

Questions connexes