Arhn - архитектура программирования

RUBY - Правильный способ создания массива хэшей внутри хеша

мне нужно сделать массив хэшей внутри хеша, что-то вроде этого:

merit_hash => {
    students => [
    {
        "id": id,
        "name": name,
        subjects => [
            {
                "id": id,
                "grade": grade
            },
            {
                "id": id,
                "grade": grade
            }
        ]
    },
    {
        "id": id,
        "name": name,
        subjects => [
            {
                "id": id,
                "grade": grade
            },
            {
                "id": id,
                "grade": grade
            }
        ]
    }
    ]
}

Прямо сейчас у меня есть массив студенческих хэшей, но я точно не знаю, как поместить в него предметный массив, я делаю это:

merit = {}
merit["students"] = []

students.each do |students|
    student_subjects = Array.new
    merit["students"].push(    
      {
        "id" => students.id,
        "name" => students.name.to_s
        selected_batch_subjects.each do |subjects|
            grade = FinalGrades.where(batch_subject_id:subjects.id, period_id: period.id, student_id: student.id).first.value
            student_subjects.push(
                {
             "id" => subjects.id,
             "grade"=> grade
                }
            )
        end 
      }
    )
end

но выдает эту ошибку

неожиданный '}', ожидающий ключевое слово_end

когда я пытаюсь закрыть студенческий хэш... что я могу сделать, чтобы это сработало? или, какой лучший способ реализовать это?

Спасибо!


Ответы:


1

Что-то вроде этого должно работать:

merit = {}
merit["students"] = []
students.each do |student|
  student_information = {"id" => student.id, "name" => student.name.to_s}
  student_subjects = []
  selected_batch_subjects.each do |subjects|
    grade = FinalGrades.where(batch_subject_id:subjects.id, period_id: period.id, student_id: student.id).first.value
    student_subjects.push({"id" => subjects.id, "grade" => grade})
  end
  student_information[:subjects] = student_subjects
  merit["students"].push(student_information)
end

Важной частью является добавление предметов каждого учащегося к уже существующему хешу.

24.02.2017
  • Идеальный! это то, что я искал. Большое спасибо. 25.02.2017

  • 2

    Ваши итерации мне не очень понятны, но для текущего цикла и нажатия массива вы можете сделать так:

    merit = {}
    merit["students"] = []
    
    students.each do |students|
        student_subjects = []
        merit["students"] << {
            "id" => students.id,
            "name" => students.name.to_s
        }
        selected_batch_subjects.each do |subjects|
        grade = FinalGrades.where(batch_subject_id:subjects.id, period_id:   period.id, student_id: student.id).first.value
            student_subjects << {"id" => subjects.id,"grade"=> grade}  
        end
    end
    
    24.02.2017
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..