On 5/30/07, loiseau Gaetan <[EMAIL PROTECTED]> wrote:
>  J'ai oublié, tu as aussi
>
> http://blog.invisible.ch/2006/01/02/where-plugin/
>
> (http://www.railsfrance.org/node/264#comment )
>
> Requete google : recherche multicritère rails (4° resultat ...)
>
>

Dans le genre il vaut mieux utiliser ez-where c'est plus puissant avec une
mini gestion des relations
http://brainspl.at/articles/2006/06/30/new-release-of-ez_where-plugin

Le dev n'est plus pas actif mais jusqu'à maintenant le plugin est maintenu
pour rester compatible avec les release de rails

Ceci dit IMHO ce genre d'approche type DSL charmant sur le papier est d'un
intéret limité pour faire du multicritère/multi operateur, c'est juste un
moyen élégant de hardcoder des conditions légèrement dynamique de facon
élégante.

le code:

>     region = params[:region].to_i
>     signe = params[:signe].to_i
>     pourc = params[:pourc].to_f
>
>     if pourc == 0 and region == 0
>       conditions = nil
>     elsif not pourc == 0
>       if not region == 0
>         conditions = ["region_id = ? AND pourcentage_k > ?", region,
> pourc ]
>       else
>         case signe
>           when 1
>             conditions = ["pourcentage_k > ?", pourc ]
>           when 2
>             conditions = ["pourcentage_k = ?", pourc ]
>           when 3
>             conditions = ["pourcentage_k < ?", pourc ]
>         end
>       end
>     elsif not region == 0
>       conditions = ["region_id = ?", region]
>     end


est strictement équivalent à (syntaxe approximative, je ne sais pas si le
typecast automatique vers Float fonctionnera)

EzWhere::Condition.new do
  region_id = params[:region]
   pourcentage_k > params[:pourc] if params[:signe] == 1
  pourcentage_k = params[:pourc] if  params[:signe] == 2
  pourcentage_k < params[:pourc] if params[:signe] == 3
end

Bien mais pas top surtout pour le mapping http -> sql quand il y a des
opérateurs dynamique en jeu, on perd rapidement le coté DRY.

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