Я использовал group_by
, чтобы получить определенный желаемый результат.Основываясь на объяснении в ответе, я обновил свой вопрос, чтобы отразить ответ, чтобы увидеть шаги, необходимые для достижения решения, см. Историю редактирования.
@grouped_test_specific_reports = TestSpecificReport.all.group_by(&:equipment_type_name)
Приведенный выше код дал этот результат:
2.5.1 :026 > pp @grouped_test_specific_reports
{"Ultrasonic Probes"=>
[#<TestSpecificReport:0x00007f832aa2d6e0
id: 10,
equipment_type_id: 2,
test_method_id: 1,
equipment_amount: "Multiple",
equipment_heading: "UT Probes">],
"Ultrasonic Instruments"=>
[#<TestSpecificReport:0x00007f832aa2d3c0
id: 8,
equipment_type_id: 1,
test_method_id: 1,
equipment_amount: "Single",
equipment_heading: "UT Instrument">],
"Visual Test Equipment"=>
[#<TestSpecificReport:0x00007f832aa2cfb0
id: 11,
equipment_type_id: 4,
test_method_id: 1,
equipment_amount: "Single",
equipment_heading: "VT Equipment">]}
=> {"Ultrasonic Probes"=>[#<TestSpecificReport id: 10, equipment_type_id: 2, test_method_id: 1, equipment_amount: "Multiple", equipment_heading: "UT Probes">], "Ultrasonic Instruments"=>[#<TestSpecificReport id: 8, equipment_type_id: 1, test_method_id: 1, equipment_amount: "Single", equipment_heading: "UT Instrument">], "Visual Test Equipment"=>[#<TestSpecificReport id: 11, equipment_type_id: 4, test_method_id: 1, equipment_amount: "Single", equipment_heading: "VT Equipment">]}
Моя следующая цель состоит в том, чтобы вывести список сгруппированных тестовых отчетов в браузере по их ключам, я смог сделать это с помощью @grouped_test_specific_reports.each { |key, value| puts key }
- "VisualИспытательное оборудование "
- " Ультразвуковые приборы "и
- " Ультразвуковые зонды "
Теперь нам нужно перебрать значения, которые являются массивом, вдругой цикл для сравнения equipment_amount
.
Значения с equipment_amount: "Multiple"
будут иметь значок плюс перед ними, а значения с equipment_amount: "Single"
будут просто выпадающим:
Вот код для интерфейса:
- @grouped_test_specific_reports.each do |equipment_type_name, test_specific_reports|
.form-group.row
.col-sm-6
%label
= equipment_type_name
= select_tag '', options_from_collection_for_select(test_specific_reports, :id, :equipment_heading), { include_blank: "Select #{equipment_type_name} List", class: 'form-control select2', style: 'width: 100%;' }
.col-sm-1
- test_specific_reports.each do |test_specific_report|
- if test_specific_report.equipment_amount == 'Multiple'
.icon.text-center
%i.fa.fa-plus-circle.add-icon