0

我的应用程序跟踪数据库中具有日期和持续时间的事件。我正在尝试查询所有状态为“即将到来”的事件,这些事件的日期和持续时间都小于今天。到目前为止,我已经尝试过:

events = Event.where('status = "Upcoming" and date <= (? + duration)', Date.parse(Time.now.to_s))

其中 date 是我的日期列,duration 是一个整数,表示事件运行的天数。上面的查询产生一个空集和一个 MySQL 警告“截断不正确的 DOUBLE 值:'2013-05-09'

数据库目前是 MySQL,但将来可能会改变。

我找到了一个可以提供正确结果的 SQL 查询,但是由于 date_add() 调用,我觉得 Railsy 不够:

SELECT `events`.* FROM `events` WHERE (status = "Upcoming" and date_add(date, interval 2 day) <= '2013-05-09');

如果必须,我会使用 date_add() 函数,但我不知道 Rails 语法如何生成这样的查询。想法?

4

1 回答 1

0

这是一个解决方案,但不是一个非常快的解决方案:

Event.where(status: 'Upcoming').select{|e| (e.date + e.duration.days) < Date.today}

如果我是你,我会更改表结构和模型。您可以使用before_save挂钩来更新作为事件结束的新字段(日期 + 持续时间.days)。你可以只使用 ActiveRecord 来获得结果,而且速度会很快。

有关回调的更多信息,请查看 http://xyzpub.com/en/ruby-on-rails/3.2/ar_sonstiges.html#ar_callbacks 。before_save

于 2013-05-11T13:07:10.157 回答