编写activerecord语句来查询datetime列

时间:2016-03-20 23:17:44

标签: ruby-on-rails-4 activerecord

我有一个配置文件表,列名为videoconfavailability,是一个日期时间类型。我正在尝试制作一个Ajax button_tag来搜索Time.now中1小时和Time.now前1小时的所有视频可用性。 到目前为止,我在这里有这一行,是否有一个NOT子句来过滤掉其他条件?

Profile.where("videoconfavailability <= ? AND videoconfavailability >= ?", Time.now + 1.hour , Time.now - 1.hour )

这里的最终目标是让所有时间在当前时间前1小时和当前时间后1小时可用。 这会起作用吗?

1 个答案:

答案 0 :(得分:0)

对我来说看起来不错 - 也许你可以解释一下你遇到的问题!

在使用它时,您可以考虑创建与Profile模型相关联的范围。如果您需要使用不同的时间范围,它可能会接受arguments。如果没有,那么只需对其进行硬编码,以便在重复使用时一次又一次地使用它。

scope :available_within_time, -> (start, end) { where("videoconfavailability <= ? AND videoconfavailability >= ?", start, end )

正如您在问题中所写的那样,或许可以考虑使用Rails时间助手来使事情变得更加简洁。

1.hour.ago
1.hour.from_now

如果您想过滤掉否定匹配以检查其他条件,可以将.where.not(QUERY)链接到现有查询。