【问题标题】:Rails UI date navigation control generation (ActiveRecord logic)Rails UI 日期导航控件生成(ActiveRecord 逻辑)
【发布时间】:2012-11-28 04:11:05
【问题描述】:

我有一个应用程序,用户可以在其中查看今天或给定日期的体育赛事(如果用户在 URL 中手动输入)。用户可以使用 UI 控件按日期导航体育赛事,大致如下所示:

Tue Nov. 27  | Wed Nov. 28  | Thu Nov. 29

(日期是除了中间当前活动的链接之外的链接。)

此日期导航控件非常适合几乎每天发生的体育赛事。用户永远不会盯着空白页的事件。但是,对于 NFL 等体育赛事,赛事只发生在周一、周四、周日(有时是周六),用户使用日期导航 UI 控件变得很麻烦。

我想做的是更改创建日期导航 UI 链接背后的逻辑,以仅包含那些有事件的日期。逻辑是这样的:

  • 给定今天的日期或用户提供的日期,返回最近的有事件的日期(current_date)
  • 给定一个 current_date,找到最近的有事件的前一个日期(previous_date)
  • 给定一个 current_date,找到最近的有事件的下一个日期 (next_date)

因此,对于 NFL,日期导航 UI 控件可能如下所示,假设今天的日期是 11 月 27 日:

Mon Nov. 25  | Thu Nov. 29  | Sun Dec. 2

判断给定日期是否有任何事件的方法是通过数据库中的start_time 字段。

我不喜欢在没有代码的情况下发布问题,但我正在寻找一些指导,说明我应该如何解决这个问题,而不必多次访问数据库。

注意 #1:当您单击一项运动的日期时,它会返回该日期的所有事件。日期导航不用于查看单个事件。

【问题讨论】:

    标签: ruby-on-rails datetime activerecord


    【解决方案1】:

    在您的模型中创建一个范围方法,用于获取给定运动的下两个开始日期和最近的开始日期。限制它只返回三个记录。

    在您的控制器中使用此范围仅获取这三个游戏对象。使用控制器中的这三个游戏对象,将它们作为实例变量传递给视图部分(例如render @games),并在部分中编写通用链接代码<%= link_to "#{@games.start_time}", your_path(@game) %>。 Rails 会根据集合中的对象数量(三个游戏)自动迭代这个部分。

    来源:http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials

    【讨论】:

    • 感谢您的回复。您的范围建议给了我一些想法。
    • 好的,根据你的想法,我最终想出了一个合理的方法。你的回答不会奏效(也许我的问题不清楚),但它让我思考!所以谢谢。
    • 嘿,伟大的解决方案来自灵感的火花,而不是答案。很高兴能提供帮助 - 祝项目好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2018-03-20
    • 1970-01-01
    • 2018-12-05
    相关资源
    最近更新 更多