Как выполнять поиск между диапазоном дат, используя модель 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-кода.


person Russ Bradberry    schedule 07.05.2010    source источник


Ответы (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)

Для получения дополнительной информации о запросах Active Record в Rails 3 см.:
http://railscasts.com/episodes/202-active-record-queries-in-rails-3

person coderjoe    schedule 07.05.2010