Bonjour à tous. La question me semble assez basique mais je n'ai pas encore trouver de solution malheureusement. J'ai une classe Person qui contient des données de clients. J'ai une classe Category qui contient des noms de catégories La relation entre les 2 est un habtm. J'ai codé un truc un peu sale pour vérifier qu'une catégorie n'est pas ajoutée 2X pour une même persone dans le contrôleur Person. Mais en fait, je sais que ce n'est pas sa place et qu'il doit être possible de faire un validates_uniqueness ou un truc custom dans le modèle mais je ne vois pas comment. Quelqu'un aurait une piste pour m'aider ? Grand merci. -- Laurent RICHARD laurent.richard@rubyfr.org ------------------------------------------------------------------ What gets us into trouble is not what we don't know. It's what we know for sure that just ain't so. -- Mark Twain ------------------------------------------------------------------ PGP-fingerprint 8260 2267 9714 07E3 182F C7B0 9581 794B D743 6F61 My public key is available at : http://pgp.mit.edu Key_ID=D7436F61
on 12.03.2008 17:59
on 12.03.2008 18:08
On Mar 12, 2008, at 5:35 PM, Laurent RICHARD wrote: > La relation entre les 2 est un habtm. > > Grand merci. Tu peux définir la fonction validate dans tes modèle, qui sera appelée à chaque sauvegarde. Pour lever une erreur, utilise alors Errors.add
on 12.03.2008 19:13
Le mercredi 12 mars 2008 à 18:07 +0100, Fabien JAKIMOWICZ a écrit : > Tu peux définir la fonction validate dans tes modèle, qui sera appelée > à chaque sauvegarde. Pour lever une erreur, utilise alors Errors.add Tu veux dire avec un genre boucle qui vérifie que pour chaque categorie.id n'apparait pas dans les suivants ? -- Laurent RICHARD laurent.richard@rubyfr.org ------------------------------------------------------------------ What gets us into trouble is not what we don't know. It's what we know for sure that just ain't so. -- Mark Twain ------------------------------------------------------------------ PGP-fingerprint 8260 2267 9714 07E3 182F C7B0 9581 794B D743 6F61 My public key is available at : http://pgp.mit.edu Key_ID=D7436F61
on 12.03.2008 20:06
2008/3/12 Laurent RICHARD <laurent.richard@rubyfr.org>: > > Le mercredi 12 mars 2008 à 18:07 +0100, Fabien JAKIMOWICZ a écrit : > > > > Tu peux définir la fonction validate dans tes modèle, qui sera appelée > > à chaque sauvegarde. Pour lever une erreur, utilise alors Errors.add > > Tu veux dire avec un genre boucle qui vérifie que pour chaque > categorie.id n'apparait pas dans les suivants ? > Désolé, je pensais que le problème se situait sur l'emplacement du code de validation. Pour ton cas (éviter les doublons), tu devrais juste te contenter de faire un find avec des conditions et des inclusions pour vérifier la présence / abscence de la ligne. Sinon tu peux aussi le faire en ruby (moins performant selon les cas) en utilisant directement la relation habtm. -- Fabien Jakimowicz
on 12.03.2008 20:07
2008/3/12 Fabien Jakimowicz <fabien@jakimowicz.com>: > > > Désolé, je pensais que le problème se situait sur l'emplacement du > code de validation. > > Pour ton cas (éviter les doublons), tu devrais juste te contenter de > faire un find avec des conditions et des inclusions pour vérifier la > présence / abscence de la ligne. Sinon tu peux aussi le faire en ruby > (moins performant selon les cas) en utilisant directement la relation > habtm. > je viens de me rendre compte que j'ai surement mal compris. Tu souhaites te éviter qu'une catégorie ne soit utilisable que par une personne a la fois ? Dans ce cas, pourquoi le habtm ? -- Fabien Jakimowicz
on 12.03.2008 20:50
Le mercredi 12 mars 2008 à 20:07 +0100, Fabien Jakimowicz a écrit : > > > categorie.id n'apparait pas dans les suivants ? > > je viens de me rendre compte que j'ai surement mal compris. Tu > souhaites te éviter qu'une catégorie ne soit utilisable que par une > personne a la fois ? Dans ce cas, pourquoi le habtm ? En fait, pour résumé, toutes les personnes peuvent utiliser toutes les catégories. J'ai juste envie d'éviter qu'une même catégories se retrouvent plusieurs fois dans la liste d'une même personne. Je viens de penser au :unique dans le modèle mais je n'ai pas encore testé.-- Laurent RICHARD laurent.richard@rubyfr.org ------------------------------------------------------------------ What gets us into trouble is not what we don't know. It's what we know for sure that just ain't so. -- Mark Twain ------------------------------------------------------------------ PGP-fingerprint 8260 2267 9714 07E3 182F C7B0 9581 794B D743 6F61 My public key is available at : http://pgp.mit.edu Key_ID=D7436F61
on 12.03.2008 22:36
Le mercredi 12 mars 2008 à 20:20 +0100, Laurent RICHARD a écrit : > > > > Tu veux dire avec un genre boucle qui vérifie que pour chaque > > > > > Je viens de penser au :unique dans le modèle mais je n'ai pas encore > testé. J'ai coupé l'herbe sous le pied. J'ai fait un execute "ALTER TABLE categories_organisms ADD CONSTRAINT UNIQUE (organism_id, category_id);" dans la table de jointure. Et j'ai catché l'erreur pour le flash. -- Laurent RICHARD laurent.richard@rubyfr.org ------------------------------------------------------------------ What gets us into trouble is not what we don't know. It's what we know for sure that just ain't so. -- Mark Twain ------------------------------------------------------------------ PGP-fingerprint 8260 2267 9714 07E3 182F C7B0 9581 794B D743 6F61 My public key is available at : http://pgp.mit.edu Key_ID=D7436F61
on 13.03.2008 02:29
2008/3/12 Laurent RICHARD <laurent.richard@rubyfr.org>: > > > > > > > présence / abscence de la ligne. Sinon tu peux aussi le faire en ruby > > J'ai juste envie d'éviter qu'une même catégories se retrouvent plusieurs > fois dans la liste d'une même personne. > > Je viens de penser au :unique dans le modèle mais je n'ai pas encore > testé. ok, en effet c'est plus simple une fois compris. Le mot clé uniq devrait te protéger pour la récupération, mais ca peut etre en dupliqué dans la base. -- Fabien Jakimowicz