0

Mon modèle, Goal, possède les trois attributs suivants: goal_type, goal_length et is_complete.
Goalbelongs_to :user.J'ai de la difficulté à utiliser validates_uniqueness_of avec une condition spécifique

goal_type ne peut être "X", "Y" ou "Z"

goal_length ne peut être "court", "mi" ou "long"

is_complete peut être vrai ou faux

Je veux qu'il y ait que jamais un Goal (validates_uniqueness_of) avec un spécifié goal_length et goal_type quand on regarde les objectifs que les deux appartiennent au même utilisateur et ont is_complete défini sur false

exemples: langage simple

Si un utilisateur a un shortX but qu'ils ont pas encore terminé, ils ne peuvent pas créer un nouvel objectif shortX. Si un utilisateur de shortX atteint un but, il peut créer un nouvel objectif shortX.

Cette validation fonctionne, mais ne vérifie pas si les attributs existants ont l'attribut is_complete défini sur true. Si is_complete est vrai sur les modèles précédemment existants, il est autorisé à créer un nouvel objectif avec les mêmes attributs:

validates_uniqueness_of :goal_type, scope: [:goal_length, :user_id] 

Comment puis-je ajouter un chèque de la condition où la validation est ignorée si l'objectif précédent correspondant is_complete est-il défini sur true?

Répondre

0

Cette validation semble fonctionner comme prévu:

validates_uniqueness_of :goal_type, scope: [:goal_length, :user_id], conditions: -> { where(is_complete: false) } 
Questions connexes