我正在尝试创建一个范围,其中添加了checkin_time(DateTime),其持续时间(Int)以小时为单位,大于或等于Time.now
这样的事情
scope :current, -> { where('checkin_time + duration.hours >= ?', Time.now) }
但是,上面的字符串'checkin_time + duration.hours >= ?'
无效。我怎样才能达到能给我正确结果的东西呢?
答案 0 :(得分:2)
使用PostgreSQL最简单的方法是将duration
转换为interval
并将interval
添加到您的时间戳中。像这样:
where("checkin_time + (duration || 'hours')::interval >= ?", Time.now)
甚至:
where("checkin_time + (duration || 'hours')::interval >= now()")
duration || 'hours'
构建一个类似'6hours'
的字符串,然后::interval
将该字符串转换为interval
,可以将其添加到时间戳中。