【问题标题】:Organizing by rails datetime in view在视图中按 Rails 日期时间组织
【发布时间】:2015-07-15 17:26:44
【问题描述】:

我正在 Rails 中创建一个日程安排应用程序,但在尝试按日期组织房间时遇到了困难。当我说一个房间时,我基本上只是指日程安排中的一个街区。一个典型的活动可能是午餐(一个房间),然后是社交部分(另一个房间)。以下是我获得房间的方式:

@rooms = Room.where(event_id: @current_event.id).order(:start_time)

这样会按照开始时间的顺序返回属于某个事件的房间。在我的视图中,我循环显示并显示活动的房间,但我想在视图中按日期对它们进行分组,以防有一个持续多天的活动。

:start_time 也是 Ruby 中的日期时间类型。用人类的话说,我要做的是查看日期部分,如果房间日期与当前组不同,我将打印新日期并继续对当天的房间进行分组。如果我不清楚,这是一个简单的例子:

Event: Staff Retreat

July 14th, 2015
-----------------------
12:30 PM
Team building Lunch Begins
------------------------
6:30 PM
Team building Dinner Begins
------------------------

July 15th, 2015
------------------------
9:30 AM
Team building Breakfast Begins   

那么在@rooms 变量(即日期时间)中对房间进行分组,那么显示上述表格的最佳方式是什么?我认为在我的循环中我应该检查日期是否与前一个房间相同,如果不打印日期

- @rooms.each do |room|
    room.start_time.strftime("%B %d, %Y")
    room.start_time.strftime("%I:%M%p")
    room.name

我在后勤方面遇到了麻烦,因为使用模型-视图-控制器概念,我觉得视图中的排序可能会让视图做一些它不应该做的事情。我也在努力解决如何在视图中做到这一点。我认为在控制器中设置一个变量来保存我循环时的临时日期会起作用,但看起来这会开始变得非常混乱。将@rooms 变量中的各种日期分组的最佳方法是什么?

【问题讨论】:

    标签: ruby-on-rails ruby date datetime ruby-on-rails-4


    【解决方案1】:

    你可以试试这个。这将返回一个哈希值,其中日期是键,值将包含与该时间相关的所有@rooms。

    @rooms = Room.where(event_id: @current_event.id)
    @rooms = Hash[@rooms.sort_by{|o| o.start_time.to_date}.group_by {|room| room.start_time.to_date}.map{|l,m| [l, m.sort_by{|k| k.start_time}]}]
    

    现在您可以在视图中像这样遍历房间。我把代码放在 erb 格式。

      <% @rooms.each do |k, v| %>
         <%= k %>
         <% v.each do |room| %>
           <%= room.created_at.start_time('%I:%M %p')%>
           <%= #room.name or title what so ever. %>
         <% end %>
      <% end %>
    

    【讨论】:

    • 谢谢!这就像我想要的那样将它们组合在一起,但是有一个问题,日期不正确。一个房间在 7-13 是第一个,然后两个房间在 15 号,然后是第二个,然后 14 号有一个房间在最后,并且顺序不是它们创建的顺序。我将发布房间模型条目,希望对您有所帮助
    • name: "房间测试", created_at: "2015-07-13 20:03:08", updated_at: "2015-07-13 20:03:08", event_id: 1, start_time : "2015-07-13 17:30:00">, #, #, #]>
    • 我已经更新了我的答案。你现在可以试试吗?希望它会工作
    • 添加了先排序来对房间进行排序。
    • 太好了,谢谢!!这样就彻底解决了。让它看起来如此简单!
    猜你喜欢
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 2013-12-17
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    相关资源
    最近更新 更多