我需要使用默认的created_at Rails字段获取仅包含在时间范围内的记录。这一天没有成就。
我有这个:
@start_time = test.start_time.strftime("%I:%M%p")
@end_time test.end_time.strftime("%I:%M%p")
@websites = device.websites.where(:created_at => @start_time..@end_time)
我正在寻找类似的东西:
@websites = device.websites.where(:created_at::time => @start_time..@end_time)
这会产生这个没有结果的SQL语句。
SELECT DISTINCT `websites`.* FROM `websites` WHERE `websites`.`device_id` = 2 AND (`websites`.`created_at` BETWEEN '16:10:00' AND '21:10:00')
但是如果我将时间函数添加到created_at字段,那么工作正常。
SELECT DISTINCT `websites`.* FROM `websites` WHERE `websites`.`device_id` = 2 AND (time(`websites`.`created_at`) BETWEEN '16:10:00' AND '21:10:00')
最好的Rails方式如何做到这一点?
答案 0 :(得分:1)
Rails会自动将时间对象转换为数据库所需的格式,因此不需要strftime。你应该能够这样做:
@websites = device.websites.where(:created_at => test.start_time..test.end_time)