从数组哈希中的元素返回值

时间:2017-07-18 03:07:00

标签: ruby-on-rails haml

我有以下数据:

{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点收到第一个订单,但是第一个订单在第一个订单后的第一个订单,这个订单将在上午9点显示。

如何安排控制器中的数据以正确显示? 我失踪的东西?

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

1 个答案:

答案 0 :(得分:0)

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

- @orders.each do |rider_id, orders|

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

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

谢谢。