返回最接近现在的特定数量的日期时间结果

时间:2016-02-09 05:22:15

标签: ruby-on-rails

我正在构建一个测验应用程序。假设我有四个测验(应该在下午5点,下午6点,晚上7点和晚上8点运行),我通过在.datetime模型中设置一个名为game_start的{​​{1}}来表示它。

接下来,我希望在按日期时间显示接下来的3个测验时向用户显示。我知道我可以通过比较Quizgame_start来做到这一点:

Time.now

我发现有人在this answer中遇到了类似的问题,但他们没有尝试返回多个匹配项。

所以它有点工作,但这并不遵循DRY。是否可以指定我想要返回最接近 <p>Upcoming Game #1: <%= Quiz.where("game_start >= ?", Time.now).order(game_start: :asc).first.topic %></p> <p>Upcoming Game #2: <%= Quiz.where("game_start >= ?", Time.now).order(game_start: :asc).second.topic %></p> 的前三个结果而不是单独执行它们?

1 个答案:

答案 0 :(得分:0)

您可以使用limit仅检索3.在您的控制器中:

@quizzes = Quiz.where("game_start >= ?", Time.now).order(game_start: :asc).limit(3)

然后在您的视图中迭代@quizzes以显示每个测验:

<% @quizzes.each_with_index do |quiz, index| %>
  <p>Upcoming Game #<%= index + 1 %>: <%= quiz.topic %></p>
<% end %>