【问题标题】:Returning a specific number of datetime results closest to now返回最接近现在的特定数量的日期时间结果
【发布时间】:2016-02-09 05:22:15
【问题描述】:

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

接下来,我想在 接下来的 3 个测验 在日期时间之前向用户显示。我知道我可以通过比较 game_startTime.now 来做到这一点,如下所示:

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

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

所以它有点工作,但这并不遵循 DRY。是否可以指定我要返回最接近Time.now 的前三个结果,而不是单独执行它们?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    您可以使用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 %>
    

    【讨论】:

    • 最好将其作为范围添加到模型scope :upcoming, -&gt; (n) { order(game_start: :asc).limit(n) }
    猜你喜欢
    • 2021-01-01
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多