Rails запрашивает условия для часа создания

#ruby-on-rails

#ruby-on-rails

Вопрос:

При попытке обобщить базу данных трафика за определенный промежуток времени невозможно выполнить поиск, вызывая компонент объекта datetime как таковой:

  txat0 = Transaction.where(['shop_id = ? AND created_at.hour = ?', shop, 0]).count
 

Можно было бы пройти через маршрут SQL (т.Е. postgresql)

 select extract(shop_id, hour from created_at) from transactions
 

и фильтрует оттуда.

Но каков краткий способ достижения этого с помощью ruby или rails (производительность не является проблемой для этого запроса)?

Ответ №1:

Я полагаю, что вы могли бы сделать микс и запустить часть SQL внутри запроса ActiveRecord.

Как насчет:

 Transaction.where("DATE_PART('hour', created_at) = ?", 0)
 

PS: я проигнорировал shop_id предложение в приведенном выше примере, но вы можете просто добавить его позже.

Комментарии:

1. допустимый ответ. Единственным незначительным недостатком является зависимость от синтаксиса, специфичного для db. Для mysql это было бы .where("HOUR(created_at) = ?", 0)