Активная запись найти условия в виде строки - PullRequest
1 голос
/ 18 января 2010

У меня есть некоторые условия, чтобы перейти к поисковику. Проблема в том, что я не хочу проходить в удобной форме. Итак, представьте, что я получаю хэш:

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

Я хотел бы передать его моему искателю, как:

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

Проблема в том, что это небезопасно, и я подвержен проблемам с инъекцией SQL. У меня вопрос, как лучше всего составить это условие?

Я хочу сделать это динамически. Например, я делаю сегодня как:

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

Ответы [ 2 ]

4 голосов
/ 18 января 2010

Вы можете написать это так:

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

Он будет экранирован правильно.

1 голос
/ 18 января 2010

Active Record поддерживает экранирование условий с помощью вопросительного знака:

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

Некоторая дополнительная информация в руководствах Rails, которая может вас заинтересовать:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...