Вы можете использовать Date#beginning_of_day
и Date.end_of_day
, оба предоставлены ActiveSupport
базовыми расширениями.
d = '2019-01-20'.to_date
Event.where(created_at:(d.beginning_of_day..d.end_of_day))
Это не обязательно будет сравнивать "... дату по дню, месяцу и году". но вместо этого он создаст промежуточное предложение, охватывающее весь день. Если вы хотите использовать синтаксис поиска Hash
, это, вероятно, лучший способ сделать это.
Вы могли бы пойти с
Event.where(
Arel::Nodes::NamedFunction.new('CAST',
[Event.arel_table[:created_at].as('DATE')]
).eq(d)
)
Если вы действительно хотите сравнить только день, месяц и год.
Вариант 1 приведет к
events.created_at BETWEEN '2019-01-20 00:00:00' AND '2019-01-20 23:59:59'
Вариант 2 приведет к
CAST(events.created_at AS DATE) = '2019-01-20'