Rails具有组合属性的范围

时间:2017-01-24 21:35:20

标签: ruby-on-rails ruby postgresql scope rails-activerecord

我正在尝试创建一个范围,其中添加了checkin_time(DateTime),其持续时间(Int)以小时为单位,大于或等于Time.now

这样的事情

scope :current, -> { where('checkin_time + duration.hours >= ?', Time.now) }

但是,上面的字符串'checkin_time + duration.hours >= ?'无效。我怎样才能达到能给我正确结果的东西呢?

1 个答案:

答案 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,可以将其添加到时间戳中。