Не могу позвонить. Все в наборе данных
Я сталкиваюсь с проблемами при изменении запроса с простого 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")