如何使用rails上的created_at字段比较时间范围

时间:2013-07-19 00:23:21

标签: ruby-on-rails

我需要使用默认的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方式如何做到这一点?

1 个答案:

答案 0 :(得分:1)

Rails会自动将时间对象转换为数据库所需的格式,因此不需要strftime。你应该能够这样做:

@websites = device.websites.where(:created_at => test.start_time..test.end_time)