Как я могу удалить данные в массиве использовали метод group_by в рельсах? - PullRequest
1 голос
/ 02 апреля 2019

Я хочу удалить значение данных 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

но видно, что не удаляются выбранные мной данные.

Можно делать то, что я хочу?

1 Ответ

0 голосов
/ 02 апреля 2019

.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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...