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]

Répondre à