我有以下数据:
{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点显示。
如何安排控制器中的数据以正确显示? 我失踪的东西?
如果标题不是正确的问题,我很抱歉,我想这只是表明我需要帮助。如果需要更多信息,请告诉我。谢谢大家!
答案 0 :(得分:0)
感谢朋友,问题在于迭代从查询中获得的订单。
- @orders.each do |rider_id, orders|
这里的orders
应该被连接并映射在一起,代码应该直接在第一次迭代之下,这将使它看起来像:
- @orders.each do |rider, _orders|
- orders = Order.joins(:user).where(id: _orders.map(&:id))
谢谢。