Rails: Можно ли переписать этот SQL-запрос для использования ActiveRecord? - PullRequest
1 голос
/ 10 июня 2011

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

Model.find_by_sql("SELECT *, SUM(impressions) AS impressions, SUM(cost) AS cost
                   FROM display_stats
                   WHERE (created_at >= '#{(Date.today-2).to_time.strftime('%Y-%m-%d')}'
                          AND created_at <= '#{(Date.today-1).to_time.strftime('%Y-%m-%d')}')
                   GROUP BY banner_id
                   ORDER BY cost DESC")

Вот моя структура модели:

DisplayStat (id: integer,
             banner_id: integer,
             comments: string,
             impressions: integer,
             cost: integer,
             created_at: datetime,
             updated_at: datetime)

Можно ли написать приведенный выше запрос без использования необработанного SQL?


Запуск Rails 3.1 и MySQL 5.5

1 Ответ

2 голосов
/ 10 июня 2011

Попробуйте это:

DisplayStat.
  select("banner_id, SUM(impressions) AS impressions, SUM(cost) AS cost").
  where(:created_at => (2.days.ago.beginning_of_day..2.days.ago.end_of_day)).
  group(:banner_id).
  order("cost DESC")

Диапазон дат - от начала до конца дня;2 дня назад.Когда вы передаете диапазон дат в хэш условий, rails генерирует оператор BETWEEN.

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