J'ai un modèle utilisateur avec une relation HABTM aux groupes. Je ne veux pas qu'un utilisateur puisse être dans plus de 5 groupes, donc je voudrais valider la durée de la relation HABTM.Validation de la longueur de l'association habtm sans enregistrement
Sur la page d'édition d'utilisateur, j'ai une liste de cases à cocher où l'utilisateur peut sélectionner les groupes dans lesquels il veut être (j'utilise formtastic pour le formulaire).
Dans mon contrôleur utilisateurs Je vous appelle:
@user.update_attributes(params[:user])
qui est à l'origine des rails pour mettre à jour les associations automatiquement.
Dans mon modèle d'utilisateur, je donne les résultats suivants:
def validate
if self.groups.length > 5
self.errors.add(:groups, "cannot have more than 5 groups")
end
end
Ceci est à l'origine de la forme à l'échec de la validation, mais les update_attributes appelle a déjà mis à jour la base de données afin de refléter les changements aux groupes associés. Ainsi, chaque fois qu'un utilisateur clique sur le bouton Enregistrer, ses associations de groupes sont enregistrées, même si l'enregistrement n'est pas valide.
Quelle est la meilleure façon de résoudre ce problème?
Je pense que la validation doit être sur le modèle de groupe au lieu du modèle d'utilisateur, cela fonctionnerait-il? Idéalement, je voudrais mettre à jour les groupes associés sans enregistrer l'enregistrement, faire la validation, et ensuite enregistrer l'enregistrement.
Cela ne résout pas, il est persistant encore les changements. – jonnii
On dirait que j'ai mal diagnostiqué votre problème, je pensais que vous validiez comme un rappel. Le problème était que vous étiez en train de redéfinir la validation. – EmFi
J'ai déplacé la validation dans une routine de validation personnalisée comme suggéré, mais cela ne résout toujours pas le problème. – jonnii