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

Ruby on Rails Display the future date from the database that is closest to today's

在我 Ruby 的 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 %>

您将您的视线限制在今天的放映中,所以也许这就是您什么都没看到的原因。

<% 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.

在修改@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 %>