Ruby on Rails显示最接近今天的数据库的未来日期

时间:2015-01-26 18:19:57

标签: ruby-on-rails ruby date time future

在我的Ruby on Rails应用程序中,我正在构建一个影院系统。

在index.html.erb上,我想做的是如果电影尚未发布,它会显示发布日期(有效),但如果它已经发布并且有电影放映那么显示下一个显示的日期和时间。

以下是我尝试使用的index.html.erb代码,但无效。

<% if not film.release_date.blank? %>
    <% if film.release_date > Date.today %>
        Release Date: <%= film.release_date.strftime("%e %B %Y ") %>
    <% else %>
        Next Showing: 
        <% film.showings.each do |showing| %>
            <% if showing.show_date == Date.today %>
                <%= showing.show_date %><br>    
            <% end %>
        <% end %>
    <% end %>
<% end %>

2 个答案:

答案 0 :(得分:1)

您将视图限制在今天的显示中,所以也许这就是您没有看到任何内容的原因。

<% if showing.show_date == Date.current %>
    <%= showing.show_date %><br>    
<% end %>

尝试将代码更改为:

<% film.showings.select{|s| s.show_date >= Date.current}.each do |showing| %>
  <%= showing.show_date %><br>    
<% end %>

或者,如果你真的只想要下一个节目:

<%= film.showings.select{|s| s.show_date >= Date.current}.sort_by(&:show_date).first.show_date %>

我在这里使用了可枚举的方法,但如果这是数据库对象,你也可以使用whereorder_by

答案 1 :(得分:0)

在通过@Geoffroy调整代码后,我已经能够使用.take(1)正确地执行此操作:

Next Showing: 
<% 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 %>