【发布时间】:2015-03-25 07:38:47
【问题描述】:
在我的 Ruby on Rails 应用程序中,我希望能够在数据库中显示最接近当前时间的下一个未来时间,例如,如果数据库中存在时间为 13:00、13 的记录: 30、18:00、19:00 等。如果当前时间为 13:48,则将显示时间 18:00。我有类似的事情处理日期:
<% film.showings.take(1).each do |showing| %>
<%= film.showings.select{|s| s.show_date >= Date.today}.sort_by(&:show_date).first.show_date.strftime("%A %e %B %Y") %>
<% end %>
但试图随着时间的推移来适应这一点:
<% film.showings.take(1).each do |showing| %>
<%= film.showings.select{|s| s.show_time >= Time.now}.sort_by(&:show_time).first.show_time %>
<% end %>
这不起作用,我收到以下错误:
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。
谁能帮忙?
【问题讨论】:
-
有必要解释一下您是如何存储时间的。
Time.now返回一个Time对象,但这也包括日期信息。如果您只在数据库中存储小时和分钟,那么您很可能会将 1970 年或 2000 年的时间与当前时间进行比较,在这种情况下,显然不会是未来。 -
另外
s.show_time = Time.now将时间设置为当前时间,而不是测试它是否是当前时间,因为您使用的是=而不是==。它还解释了为什么您没有从数据库中获取时间,因为您刚刚将其设置为Time.now。
标签: ruby-on-rails ruby date time