我想做这样的查询:
bookings = Booking.where(user_id: @current_user.id, start_at: date.to_datetime)
在这种情况下,问题是,我只是在与时间戳00:00:00
匹配的预订中获得结果,这是非常合乎逻辑的。
是否可以格式化查询中的 start_at
参数,以便我只比较两个日期而不是日期时间?
尝试通过 SQL 将日期时间字段转换为日期:
bookings = Booking.where(user_id: @current_user.id)
.where("DATE(start_at) = ?", date)
DATE() 提取日期时间表达式的日期部分。
注意:它在 PotsgreSQL 中不起作用
或:
bookings = Booking.where(user_id: @current_user.id,
created_at: date.beginning_of_day..date.end_of_day)
这个怎么样?
bookings = Booking.where(user_id: @current_user.id, start_at: start_date..end_date)
或
bookings = Booking.where(user_id: @current_user.id)
.where('start_at > ? AND start_at < ?', start_date, end_date)
其中start_date和end_date是您要检查的两个日期。