Как я могу искать между диапазоном даты, используя модель ActiveRecord?

StackOverflow https://stackoverflow.com/questions/2790464

Вопрос

Я новичок как для Ruby, так и Activerecord. В настоящее время у меня необходимо изменить и существующий кусок кода, чтобы добавить диапазон дат в выборе. Текущий кусок идет так:

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-инъекции.

Это было полезно?

Решение

Я считаю, что вы можете пройти объект диапазона к ActiveReChord найти и получить то, что вы хотите:

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 Records посмотрите:
http://railscasts.com/episodes/202-iactive-record-queries-in-rails-3.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top