Как мне искать между диапазоном дат, используя модель ActiveRecord?
Я новичок в Ruby и ActiveRecord. В настоящее время мне нужно изменить и существующий фрагмент кода, чтобы добавить диапазон дат в select. Текущая часть выглядит следующим образом:
ReportsThirdparty.find(:all, :conditions => {:site_id=>site_id, :campaign_id=>campaign_id, :size_id=>size_id})
Теперь мне нужно добавить диапазон, но я не уверен, как выполнять операции BETWEEN
или >=
или <=
. Я думаю, что мне нужно что-то похожее на:
ReportsThirdparty.find(:all, :conditions => {:site_id=>site_id, :campaign_id=>campaign_id, :size_id=>size_id, :row_date=>"BETWEEN #{start_date} AND #{end_date}")
Даже если это действительно сработало, я знаю, что использование интерполяции здесь оставило бы меня подверженным атакам SQL-инъекций.
Ответы
Ответ 1
Я считаю, что вы можете передать объект Range в ActiveRecord и найти то, что хотите:
ReportsThirdParty.find(:all,
:conditions => {
:site_id => site_id,
:campaign_id => campaign_id,
:size_id => size_id,
:row_date => start_date..end_date } )
Изменить: если вы используете Rails 3, вы можете использовать что-то похожее на:
ReportsThirdParty.where(
:site_id => site_id,
:campaign_id => campaign_id,
:size_id => size_id,
:row_date => start_date..end_date)
Для получения дополнительной информации о запросах Rails 3 Active Record выполните следующие действия:
http://railscasts.com/episodes/202-active-record-queries-in-rails-3