Не могу позвонить. Все в наборе данных

Я сталкиваюсь с проблемами при изменении запроса с простого SQL (примечание: я не использую AR, но продолжение)

Так что это работает:

Post.fetch(
    "SELECT
      COUNT(*) as count, HOUR(created_at) as date, class_type
    FROM
      tours t
    WHERE
      t.created_at Between ? and ?
    GROUP BY hour(t.created_at), flavor", @range_begins, @range_ends
    ).all

И он возвращает ожидаемый массив. Но это не так:

Post.select("COUNT(*) as count, HOUR(created_at) as date, class_type")
    .where(created_at: @basic_range)
    .group_by("HOUR(created_at), flavor")
    .all

Но в консоли (без.all в конце) сгенерированный запрос выглядит хорошо (отформатирован для лучшего чтения):

<Sequel::Mysql2::Dataset:
"SELECT
  'COUNT(*) as count, HOUR(created_at) as date, class_type'
FROM
  `posts`
WHERE
  ((`created_at` >= '2014-05-01 00:00:00') AND (`created_at` <= '2014-05-01 23:59:59')) 
GROUP BY
  'HOUR(created_at), flavor'">

Добавление ".all" в конце возвращает массив, похожий на этот:

[#<Tour @values={:"COUNT(*) as count, HOUR(created_at) as date, class_type"=>"COUNT(*) as count, HOUR(created_at) as date, class_type"}>]

что мне не хватает? Заранее спасибо за помощь

1 ответ

Решение

Когда вы пишете запрос с where функция, вам не нужно писать .all в конце он по умолчанию выдаст все результаты, соответствующие параметрам запроса. Вам просто нужно сделать:

Post.select("COUNT(*) as count, HOUR(created_at) as date, class_type")
    .where(created_at: @basic_range)
    .group_by("HOUR(created_at), flavor")
Другие вопросы по тегам