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