【问题标题】:RUBY - Correct way of doing array of hashes inside of hashRUBY - 在散列内做散列数组的正确方法
【发布时间】:2023-03-11 01:05:02
【问题描述】:

我需要在散列中做一个散列数组,像这样:

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

但是会抛出这个错误

意外的'}',需要keyword_end

当我尝试关闭学生哈希时...我该怎么做才能完成这项工作?或者,实现这一点的最佳方式是什么?

谢谢!

【问题讨论】:

    标签: ruby-on-rails arrays ruby hash


    【解决方案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
    

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

    【讨论】:

    • 完美!这就是我一直在寻找的。非常感谢。
    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-01
      • 2018-06-29
      • 2018-12-28
      • 1970-01-01
      • 2014-01-27
      相关资源
      最近更新 更多