对于时间相关的查询我们可以直接用数据库底层命令来做:
where_str << "at_moment between ? AND ?" where_vals << date_start << "#{date_end} 23:59:59" where_str << (where_str == "" ? "(now() - '#{days_interval}'::INTERVAL) < at_moment" : " AND (now() - '#{days_interval}'::INTERVAL) < at_moment") AuditLog.where(where_str,*where_vals).order("at_moment DESC")
不过不怎么漂亮,我们何不让Rails帮我们完成这些呢?
AuditLog.where("created_at > ? AND created_at < ?",Time.now - 4.hour,Time.now - 2.hour)
两者比较而言显然后面一种更加清楚简洁,而且不用考虑不同数据库兼容性的问题了。 ;)