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]
