0

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

4

1 回答 1

1

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

@websites = device.websites.where(:created_at => test.start_time..test.end_time)
于 2013-07-19T00:45:20.830 回答