1 votes

Conditions de recherche de l'enregistrement actif sous forme de chaîne de caractères

J'ai quelques conditions à transmettre à un finder. Le problème est que je ne veux pas passer ces conditions de manière usafety. Imaginons donc que je reçoive un hash :

hash = {:start_date=>'2009-11-01',:end_date=>'2010-01-23'}

J'aimerais le transmettre à mon chercheur de la manière suivante :

Model.find(:all,:conditions=>"created > '#{start_date}' and created < '#{end_date}'")

Le problème est qu'il n'est pas sûr et que je suis exposé à des problèmes d'injection SQL. Ma question est la suivante : quelle est la meilleure façon de composer cette condition ?

Je veux le faire de manière dynamique. Par exemple, je fais aujourd'hui comme :

find_condition = ['created > ? and created < ?','2009-10-01','2010-01-01']
Model.find(:all,:conditions=>find_condition)

4voto

Tomas Markauskas Points 6505

Vous pouvez l'écrire comme suit :

Model.find(:all,:conditions=>["created > :start_date and created < :end_date", {:start_date => params[:one], :end_date => params[:two]}])

Il sera échappé comme il se doit.

1voto

John Topley Points 58789

Active Record prend en charge l'échappement des conditions à l'aide d'un point d'interrogation :

Model.all(:conditions => ['created > ? and created < ?',
          :start_date, :end_date])

Quelques informations complémentaires dans les Rails' Guides qui pourraient vous intéresser :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X