我要删除的数据值已经group_by
,因为对象@deals
我需要按日期排列数据。
但是,问题在于我使用了@period
的迭代,并且会再次计算@deals
中的值。效率不高,我尝试使用map
方法进行切片数据如下:
@period = Date.new(2019,3,1)..Date.new(2019,3,31)
@deals = Deal.where(created_at: @period).includes(:staff).group_by{|t| t.staff}
@period.each do |date|
@deals.map do |staff, deals|
puts "staff:#{staff.name}"
puts deals.count
selected_deals = deals.select{|t| Date.parse(t.created_at) == date}
puts selected_deals.select{|t| t.deal_product=="item1"}.count
puts selected_deals.select{|t| t.deal_product=="item2"}.count
puts selected_deals.select{|t| t.deal_product=="item3"}.count
puts selected_deals.select{|t| t.deal_product=="item4"}.count
deals-selected_deals
end
end
但是它并没有删除我选择的数据。
可以做我想做的事吗?
答案 0 :(得分:0)
.select
不会更改数据,但是会返回一个新值,.map
也是如此。尝试@period.map
,然后将整个表达式分配给一个变量。
@data = @period.map do |date|
@deals.map do |staff, deals|
selected_deals = deals.select{|t| t.created_at.to_date == date}
deals - selected_deals
end
end
如果要拒绝数组中的值,请使用.reject
。
@data = @period.map do |date|
@deals.map do |staff, deals|
deals.reject{|t| t.created_at.to_date == date}
end
end