Ruby on rails RUBY—在哈希表中执行哈希数组的正确方法

Ruby on rails RUBY—在哈希表中执行哈希数组的正确方法,ruby-on-rails,arrays,ruby,hash,Ruby On Rails,Arrays,Ruby,Hash,我需要在散列中做一个散列数组,如下所示: merit_hash => { students => [ { "id": id, "name": name, subjects => [ { "id": id, "grade": grade }, { "i

我需要在散列中做一个散列数组,如下所示:

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 = []
    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
现在,我只有学生哈希数组,但我不知道如何将主题数组放入其中,我正在这样做:

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
但是抛出了这个错误

意外“}”,应为关键字\u end

当我尝试关闭学生哈希时。。。我能做些什么来让它工作?或者,实现这一点的最佳方式是什么


谢谢

像这样的方法应该会奏效:

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

重要的部分是将每个学生的主题添加到已经存在的哈希中。

类似的操作应该可以:

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

重要的部分是将每个学生的主题添加到已经存在的哈希中。

我不太清楚您的迭代,但对于当前循环和数组推送,您可以这样做:

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 = []
    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
merit={}
成绩[“学生”]=[]
学生们,每个人都是学生|
学生科目=[]
优点[“学生”]students.id,
“name”=>students.name.to_
}
选定的受试者。每个受试者|
成绩=最终成绩。其中(批次\科目\ id:subjects.id,期间\ id:period.id,学生\ id:student.id)。第一个值
student_subjects.id,“grade”=>grade}
结束
结束

我不太清楚您的迭代,但对于当前循环和阵列推送,您可以这样做:

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 = []
    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
merit={}
成绩[“学生”]=[]
学生们,每个人都是学生|
学生科目=[]
优点[“学生”]students.id,
“name”=>students.name.to_
}
选定的受试者。每个受试者|
成绩=最终成绩。其中(批次\科目\ id:subjects.id,期间\ id:period.id,学生\ id:student.id)。第一个值
student_subjects.id,“grade”=>grade}
结束
结束

完美!这就是我要找的。非常感谢,太好了!这就是我要找的。非常感谢你。