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]

Répondre à