Validation sur un array

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
[email protected]

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 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

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
[email protected]

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

2008/3/12 Fabien J. [email protected]:

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 J.

2008/3/12 Laurent RICHARD [email protected]:

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 J.

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
[email protected]

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

2008/3/12 Laurent RICHARD [email protected]:

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 J.

Le mercredi 12 mars 2008 à 20:07 +0100, Fabien J. 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
[email protected]

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