Merci à tous les 2. Je précise au passage que les perfos ne sont en rien un soucis, l'ordre d'idées des dimensions étant une centaine d'entrées maximum, parmi lesquelles seule 1 ou 2 dizaine seront sélectionnées.
J'hésite donc entre le flag dans la BdD et l'algorithme de base dans le controller qui enlève de la collection du find(:all) les mauvais élèves... le flag est quand meme plus propre oui. gUI Le 16 mars 2012 09:21, Florian Dutey <[email protected]> a écrit : > Soit la solution d'olivier, soit tu peux "traduire" ta condition en SQL. > L'inconvénient est que cela peut te priver de l'eager loading (une requete > avec des group by / having par exemple) et que cela t'oblige à maintenir 2x > le code, 1x en ruby, 1x en SQL. > > Dans des cas complexes, l'ajout d'un champ calculé dans ta table est > probablement la "meilleure" solution... à condition d'être sur que le > contenu du champ est toujours exact =). > > Le 16 mars 2012 08:55, Olivier El Mekki <[email protected]> a écrit : > > Hello, >> >> Le problème ici est que tu vas devoir itérer sur toutes les entrées de >> ta table db et tester la condition, si tu fais comme tu l'entends. >> >> Cela va rapidement poser un problème de performance. >> >> La moins mauvaise solution serait de set is_playable en tant que champs >> dans la db, et de le calculer sur un before_save. Tu peux ensuite >> utiliser un finder classique. >> >> Pour traiter les entrées déjà existante avant cette modif, une task rake >> fera l'affaire. >> >> On 08:50 Fri 16 Mar , Guillaume Betous wrote: >> > Bonjour, >> > >> > J'ai un besoin tout con et j'ai presque honte, je dois passer à côté >> de >> > qqchose. Je veux récupérer toutes les instances d'un modèle dont >> l'appel à >> > une méthode particulière retourne "true". >> > >> > Si j'ai bien tout compris, on ne peut pas utiliser "scope" car c'est >> basé >> > sur une méthode de classe (et pas d'instance). >> > Je ne peux pas non plus utiliser de conditions car c'est la partie >> SQL de >> > la requête. >> > >> > Je schématise mon besoin : >> > >> > Class Depot < AR:B >> > def is_playable? >> > return condition_compliquee_qui_est_du_domaine_metier >> > end >> > end >> > >> > Ensuite, je voudrais faire un truc style : >> > @depots=Depots.find(:all, :condition=> "is_playable?==true" ) >> > >> > Est-ce possible ? Comment le faire proprement ? >> > >> > Merci ! >> > >> > gUI >> > >> > -- >> > Pour la santé de votre ordinateur, préférez les logiciels libres. >> > Lire son mail : [1] >> http://www.mozilla-europe.org/fr/products/thunderbird/ >> > Browser le web : [2] >> http://www.mozilla-europe.org/fr/products/firefox/ >> > Suite bureautique : [3]http://www.libreoffice.org/download/ >> > >> > -- >> > Vous avez reçu ce message, car vous êtes abonné au groupe >> "Railsfrance" de >> > Google Groups. >> > Pour transmettre des messages à ce groupe, envoyez un e-mail à >> l'adresse >> > [email protected] >> > Pour résilier votre abonnement envoyez un e-mail à l'adresse >> > [email protected] >> > >> > References >> > >> > Visible links >> > 1. http://www.mozilla-europe.org/fr/products/thunderbird/ >> > 2. http://www.mozilla-europe.org/fr/products/firefox/ >> > 3. http://www.libreoffice.org/download/ >> >> -- >> Olivier El Mekki. >> >> -- >> Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" >> de Google Groups. >> Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse >> [email protected] >> Pour résilier votre abonnement envoyez un e-mail à l'adresse >> [email protected] >> > > -- > Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de > Google Groups. > Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse > [email protected] > Pour résilier votre abonnement envoyez un e-mail à l'adresse > [email protected] > -- Pour la santé de votre ordinateur, préférez les logiciels libres. Lire son mail : http://www.mozilla-europe.org/fr/products/thunderbird/ Browser le web : http://www.mozilla-europe.org/fr/products/firefox/ Suite bureautique : http://www.libreoffice.org/download/ -- Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de Google Groups. Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse [email protected] Pour résilier votre abonnement envoyez un e-mail à l'adresse [email protected]
