Richard :
> Donc rien de plus simple que de faire un truc comme ca :
> [...]
>     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

Ton code est pas immédiatement compréhensible, ya plein
de if.

Dans ton exemple, on pourrait le réécrire comme ça, si j'ai
bien compris ton code :

SIGNES = [nil] + %w(> = <)

region = params[:region].to_i
signe  = params[:signe].to_i
pourc  = params[:pourc].to_f

conditions, arguments = [], []

unless region == 0
  conditions << '(region_id = ?)'
  arguments << region
end

unless pourc == 0
  conditions << "(pourcentage_k #{ SIGNES[signe] } ?)"
  arguments << pourc
end

# si d'autres paramètres...
# même principe on rajoute une condition SQL au tableau condition et
# un argument au tableau arguments

courts = if conditions.empty?
  Court.find(:all)
else
  Court.find(:all, :conditions => [conditions.join(' AND '), *arguments] )
end

Sinon autre solution et/ou source d'inspiration, le plugin
resultset-autofilter de fredix :

http://code.google.com/p/resultset-autofilter

overkill ou pas, selon ton problème réel.

Sinon le fait de prendre une collection d'enregistrements et
de la filtrer jusqu'à obtenir la collection voulue, c'est possible
mais cela consiste à faire le boulot par Ruby et non par le
sgbdr.

   -- Jean-François.

-- 
À la renverse.

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