2012-07-17 43 views
0

我使用哈希条件和时间范围从“Time.now”到-24小时的查询。如何在时间范围“Time.now”减x小时内显示数据库记录?

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

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

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

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

Model.duration*3600 

或:

:duration*3600 

任何暗示是非常赞赏。

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

回答

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 
+0

Thx。但我不确定,它正确回答了我的问题。我想用值为1到24的变量替换24(小时)。此变量来自数据库列“duration”。我希望,现在更清楚我的意思了。 还是要这样说, \t“duration.from_now” 实际工作? – Naii 2012-07-18 22:43:05

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 
+0

哦,通过这种代码在我的模型中,如果有任何混淆。 – Brandt 2012-07-26 05:44:32

+0

再次感谢。正如你所说,这不完全是我说的,而是一个好的开始。查询会在午夜(00:00)和23:59之间给出结果。我会尝试这种方法,并尽快给你进一步的反馈。 – Naii 2012-08-12 20:04:22

相关问题