首先,我从我的范围中获得了一系列频道
Channel.not_archived.map { |c| channels << c }
然后我按start_time
属性对其进行排序:
channels.sort! { |a, b| a.start_time <=> b.start_time }
然后我想按照他们的开始时间对他们进行分组。所以从早上8点开始的频道将组合在一起。所以我使用group_by
方法:
@grouped_channels = @channels.group_by { |c| time_with_offset(c).strftime("%I:%M %P") }
time_with_offset方法:
# Returns time with offset
def time_with_offset(channel)
user = current_user.time_zone.to_i
organization = channel.organization.time_zone.to_i
time_offset = organization -= user
channel.start_time - time_offset.hours
end
我在正确的小组中找回所有记录。我遇到的问题是这些群体不合规。因此,上午8:00的小组应该在上午9:00之前的小组。它现在只是奇怪的随机顺序。任何人都可以帮助我按正确的顺序得到这些吗?
答案 0 :(得分:0)
如果您希望按照包含所需顺序的所有键的数组h
给出的键顺序重新排序任何散列keys
的键值对,请写
(keys.zip(h.values_at(*keys))).to_h
对于2.0之前的Ruby版本,请写
Hash[keys.zip(h.values_at(*keys))]
例如,
h = { b: 1, d: 2, a: 3, c: 4 }
#=> {:b=>1, :d=>2, :a=>3, :c=>4}
keys = [:a, :b, :c, :d]
(keys.zip(h.values_at(*keys))).to_h
#=> {:a=>3, :b=>1, :c=>4, :d=>2}
步骤如下。
a = h.values_at(*keys)
#=> same as h.values_at(:a, :b, :c, :d)
#=> [3, 1, 4, 2]
b = keys.zip(a)
# => [[:a, 3], [:b, 1], [:c, 4], [:d, 2]]
b.to_h
#=> {:a=>3, :b=>1, :c=>4, :d=>2}
答案 1 :(得分:0)
首先,您要排序一次,然后按不同的时间进行分组。我希望这可以解释您不受欢迎的订单。
按偏移时间排序。
channels.sort_by { |c| time_with_offset(c) }.group_by { |c| time_with_offset(c).strftime("%I:%M %P") }