显示从数据库到现在最近的未来时间

在我的Ruby on Rails应用程序中,我希望能够在数据库中显示最接近当前时间的下一个未来时间,例如,如果存在时间为13:00,13:30,18的记录,则在数据库中显示:00,19:00等。如果当前时间是13:48,则显示时间18:00。 我有一个类似的事情与日期:

 = Date.today}.sort_by(&:show_date).first.show_date.strftime("%A %e %B %Y") %>  

但试图适应这个时间:

  = Time.now}.sort_by(&:show_time).first.show_time %>  

这不起作用,我收到以下错误:

 undefined method `show_time' for nil:NilClas 

这是因为s.show_time >= Time.now 。 如果我将其更改为s.show_time = Time.now错误发生但是它只显示当前时间而不是数据库中的时间。

值得注意的是,show_date和show_time在同一记录中,例如第一条记录的日期可能是26/01/2015,时间是22:00。 我想要的是显示日期在未来的记录时间并显示该日期的第一次,因为数据库中有两条记录,日期为26/01/2015,另一条记录的时间为22:00另一个时间是22:30。

有人可以帮忙吗?

在您的示例中,将整个数据库加载到内存中,然后对其进行过滤以找到具有所需时间的行。 我让数据库完成所有工作。

 film.showings.where("show_time >= ?", Time.now).order(show_time: :asc).first 

即使您认为应该存在,也没有回答您的实际原始问题。 你可能会或可能不会遇到这种方法的问题 – 如果你这样做,调试它将不同于调试你的“所有内存与ruby”的原始方法,所以我从这开始,然后通过查看调试SQL生成等

另一方面,如果你只想要十几个结果来过滤,也许你的方法也很好。

此外,如果数据库中的每一行都有一个日期和一次 – 我会更改您的数据库架构,以在一列中使用组合日期+时间值。 通常这是最好的方式。 对于电影数据库,我可以看到分隔日期和时间可能有意义 – 但如果每一行都有一个日期和一个时间,那么将它们组合为日期时间并没有缺点,这就是我要做的事情。 我怀疑如果你这样做你的错误可能会消失 – 你应该能够分开日期和时间来做,当然,但结合起来更有意义,并且在ruby中处理也不会那么混乱。

这是非常奇怪的代码。
但我认为它找不到合适的记录。
试试这个:

 <% film.showings.take(1).each do |showing| %> <%= film.showings.select{|s| s.show_time >= Time.now}.sort_by(&:show_time).first.try(:show_time) %> <% end %> 

如果没有崩溃,我是对的。