0

所以我phone_numbers在 Rails 3.2 中有一个表,我希望能够进行如下查询:

PhoneNumber.where("last_called_at - #{Time.now} > call_spacing * 60")

其中 last_call_at 是 adatetime并且call_spacing是一个整数,表示呼叫之间的分钟数。

我已经尝试过上述方法,我也尝试过使用

PhoneNumber.where("datediff(mi, last_called_at, #{Time.now}) > call_spacing")

如果有人可以帮助我完成这项工作,或者甚至推荐一个最新的 Rails SQL gem,我将不胜感激。

编辑:因此,使这项工作对我来说最好的方法是ready_at向我的数据库添加一列,并使用该方法在更新call_spacing或更新时更新该列。这可能是在 Rails 中解决这个问题的最语义化的方式。last_called_atbefore_save

4

1 回答 1

1

您必须在#{Time.now} 周围使用引号。要使您的第一个查询工作,您可以使用 TIME_TO_SEC() 函数:

PhoneNumber.where("(TIME_TO_SEC('#{Time.now}') - TIME_TO_SEC(last_called_at)) > (call_spacing * 60)")

这是我的方法:

PhoneNumber.where("last_called_at > '#{Time.zone.now.utc - (call_spacing * 60)}'")

还可以查看这篇文章以了解如何使用时区:

http://danilenko.org/2012/7/6/rails_timezones/

于 2013-07-07T18:41:36.970 回答