2016-11-23 1 views
0

Допустим, у меня есть ActiveRecord результат таковою:Rails Расщепление активная запись результатов в массивы/хэши

order.order_numbers 

который возвращает ActiveRecord_Associations_CollectionProxy

=> [#<OrderNumber id: 53425, Order_number: "01100", Order_number_id: 5391, Order_number_status_id: 1, comment: nil, updated_at: "2016-11-18 16:20:36">, 
#<OrderNumber id: 53426, Order_number: "04503", Order_number_id: 5391, Order_number_status_id: 1, comment: nil, updated_at: "2016-11-18 16:19:49">, 
#<OrderNumber id: 53427, Order_number: "011004", Order_number_id: 5391, Order_number_status_id: 2, comment: nil, updated_at: "2016-11-18 16:19:49">, 
#<OrderNumber id: 53428, Order_number: "004505", Order_number_id: 5391, Order_number_status_id: 1, comment: nil, updated_at: "2016-11-18 16:19:49">, 
#<OrderNumber id: 53429, Order_number: "4506", Order_number_id: 5391, Order_number_status_id: 2, comment: nil, updated_at: "2016-11-18 16:19:49">, 
#<OrderNumber id: 53430, Order_number: "4507", Order_number_id: 5391, Order_number_status_id: 1, comment: nil, updated_at: "2016-11-18 16:19:49">] 

Обратите внимание на Order_number_status_id, где 1 означает открытый и 2 означает закрыт.

Если бы я хотел разбить его на основании состояния «закрыто» и выводить результаты в отдельные массивы, как это сделать? Я просто хочу, чтобы Open Open входил в свой собственный массив, но начинаю новый массив каждый раз, когда он перемещается из закрытого числа в открытый.

В приведенном выше примере, то результат будет

  • array_1 будет содержать идентификаторы 53425 и 53426

  • array_2 будет содержать id53428

  • Array_3 будет содержать идентификатор 53430

Таким образом, он разделил бы его на 3 отдельные хеши или массивы, которые будут содержать только открытые порядковые номера, которые все будут в одном массиве.

[[#<OrderNumber id: 53425, Order_number: "01100", Order_number_id: 5391, Order_number_status_id: 1, comment: nil, updated_at: "2016-11-18 16:20:36">, 
#<OrderNumber id: 53426, Order_number: "04503", Order_number_id: 5391, Order_number_status_id: 1, comment: nil, updated_at: "2016-11-18 16:19:49">,], [<OrderNumber id: 53428, Order_number: "004505", Order_number_id: 5391, Order_number_status_id: 1, comment: nil, updated_at: "2016-11-18 16:19:49">], [<OrderNumber id: 53430, Order_number: "4507", Order_number_id: 5391, Order_number_status_id: 1, comment: nil, updated_at: "2016-11-18 16:19:49">]] 

Я открыт для предложений относительно формата вывода.

ответ

0

Посмотрите на стандартный метод Enumerable#chunk.

Вы можете сделать что-то вроде:

order.order_numbers.chunk { |o_num| o_num.Order_number_status_id == 1 }.each{|a, b| p b} 

Сохранить результат в новом массиве, чтобы удалить ненужные части.

+0

любая разработка на этом я не могу получить его работу? – user3437721

+0

заработал, отлично работает – user3437721

1

Вы можете использовать group_by

это лучше всего подходит для вас ситуации

Смежные вопросы