我正在构建一个测验应用程序。假设我有四个测验(应该在下午5点,下午6点,晚上7点和晚上8点运行),我通过在.datetime
模型中设置一个名为game_start
的{{1}}来表示它。
接下来,我希望在按日期时间显示接下来的3个测验时向用户显示。我知道我可以通过比较Quiz
和game_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>
的前三个结果而不是单独执行它们?
答案 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 %>