Rails изменяют хэш с помощью итератора, и значение в хэше одинаково - PullRequest
0 голосов
/ 04 апреля 2019

Как код, который я написал, я попытался договориться по дате

@period = Date.new(2019,3,1)..Date.new(2019,3,31)

@deals = Deal.includes(:staff).where(shop_id:1, created_at:@period).group_by{|t| t.staff}

В функции computed_deals, которую я создал, я хочу сделать сумму каждой продажи персонала за один день

def computed_deals(deals, period ,shop_id)

 #step 1 create empty container and initialize the value
 data = {}
 staff_id_container = {
  total:{item1: 0, item2: 0, item3: 0}
 }

 Staff.where(shop_id: shop_id).select(:id).each do |staff|
  staff_id_container[staff.id] = {item1:0, item2:0, item3:0}
 end

 period.each do |date|
  data[date] = staff_id_container.dup
 end

 #step2 fill it up by true value
 deals.each do |staff, deals_by_staff|
  deals_by_staff.group_by{|t| t.created_at.to_date}.each do |date, selected_deals|
   data[date][staff.id] = {
    item1: select_deals.select{|deal| deal.item == "item1"}.count
    item2: select_deals.select{|deal| deal.item == "item2"}.count
    item3: select_deals.select{|deal| deal.item == "item3"}.count
   }
  end
 end
 #step3 make sum from each staff for each day
 period.map do |date|
    sum_item1 = sum_item2 = sum_item3 = 0
    puts "top"
    puts sum_item1
    deals.each do |staff, deals_by_staff|
      sum_item1 = data[date][staff.id][:item1]+sum_item1
      sum_item2 = data[date][staff.id][:item2]+sum_item2
      sum_item3 = data[date][staff.id][:item3]+sum_item3
    end
    data[date][:total][:item1] = sum_item1.dup
    data[date][:total][:item2] = sum_item2.dup
    data[date][:total][:item3] = sum_item3.dup
    puts "bottom"
    puts sum_item1
  end
end 

Но на шаге 3 все значения total дублируются с последнего дня. Я думаю, проблема в том, что переменная изменялась при реализации каждой итерации, а заданное значение изменялось одновременно.

@data = computed_deals(@period, @deals, 1)
puts @data["2019-03-01".to_date][:total] == @data["2019-03-02".to_date][:total] #true

как я могу решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...