Return 数组散列中元素的值

Return value from elements in hash of arrays

我有以下数据:

{53=> [#<Order:0x007feba4e78050 
       deliver_at: Fri, 14 Jul 2017 09:00:00 MYT +08:00,
       shipping_city: "city name", 
       rider_id: 53>,
       #<Order:0x007feba4e776f0 
       deliver_at: Fri, 14 Jul 2017 10:00:00 
       MYT +08:00,
       rider_id: 53, 
       shipping_city: "city name">], 
71=>  [....],[....]} # elements are the same except for the values

这就是我在控制器中获取数据的方式。

@start_time = Date.today.beginning_of_day + 2.hours
@end_time = Date.today.end_of_day + 2.hours
@orders = Order.where(deliver_at: @start_time..@end_time)
                                 .where('rider_id IS NOT ?', nil)
                                 .group_by{|order| order[:rider_id]}

这在视图中。

%thead
  %tr
    %th Name
    %th 8 AM
    %th 9 AM
    %th 10 AM
    %th 11 AM
    %th 12 PM
    %th 1 PM
    %th 2 PM
    %th 3 PM
    %th 4 PM
    %th 5 PM
    %th 6 PM
    %th 7 PM
    %th 8 PM
    %th 9 PM
    %th 10 PM
    %th 11 PM
    %th 12 AM
%tbody
    -@orders.each do |rider_id, orders|
      %tr
        %td= rider_id
          - orders.each do |order|
            %td= order.shipping_city if order.within_delivery_hour?(8, 9)
            %td= order.shipping_city if order.within_delivery_hour?(9, 10)
            %td= order.shipping_city if order.within_delivery_hour?(10, 11)
            %td= order.shipping_city if order.within_delivery_hour?(11, 12)

如您所见,我按 rider_id 对数据进行分组。 我想根据骑手在同一行显示订单发货城市,但彼此相邻。如果一个订单是在早上 8 点,下一个订单是在早上 9 点,那么它们应该并排显示。

目前我是早上8点接到第一单,但是下一个在第一个之后的5个箱子,不会在早上9点显示。

如何安排我在控制器中获得的数据才能正确显示? 我缺少什么?

如果标题不是正确的提问方式,我深表歉意,我想这只是表明我需要帮助。如果需要更多信息,请告诉我。谢谢大家!

感谢一位朋友,问题在于迭代从查询中获得的订单。

- @orders.each do |rider_id, orders|

这里的 orders 应该连接并映射在一起,代码应该直接在第一次迭代下,这将使它看起来像:

- @orders.each do |rider, _orders|
  - orders = Order.joins(:user).where(id: _orders.map(&:id))

谢谢。