如何在“Time.now”减去x小时的时间范围内显示数据库记录?

时间:2012-07-17 22:08:14

标签: database ruby-on-rails-3 range conditional-statements

我使用带有哈希条件且时间范围从“Time.now”到-24小时的查询。

@time_range = @time_now..(@time_now - 24*3600)
Model.all(:conditions => { :created_at => (@time_range) })

目前,将不会显示超过24小时前创建的所有数据库记录。显示小于24小时“旧”的所有记录。

我的目标是用来自数据库列“持续时间”的变量替换长度值24。此列包含从24到1的整数值 - 具体取决于在表单中创建数据库记录的方式。

所以我需要访问这个“持续时间”列。但是我不知道Controller中是怎么做到的,因为我没有可用的模型实例。所以我不能说例如:

Model.duration*3600

或:

:duration*3600

非常感谢任何提示。

PS:这个问题类似于another one。不幸的是,我找不到答案。

2 个答案:

答案 0 :(得分:0)

你认为那个回答起来有点简单。 Rails有一种用于计算时间的内置方法系统。

如果你想回去一天,你只需要做1.day.from_now,你甚至可以做2.day.from_now

这会将数据作为时间戳返回。

1.day.from_now.beginning_of_day

1.month.from_now.beginning_of_month

1.month.from_now

1.day.from_now

答案 1 :(得分:0)

此代码可能更符合您的要求。不完全是你在说什么,但我认为它是围绕你评论的相同想法而建立的。希望它可以提供帮助。

def self.days_from_now(d)
    self.where("due_date >= ? AND due_date <= ? ", d.day.from_now.beginning_of_day, d.day.from_now.end_of_day)
end