2017-02-24 119 views
0

我需要做的哈希值的数组中的哈希里面,像这样: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 
      } 
     ] 
    } 
    ] 
} 

现在,我只是有学生哈希值的数组,但我不知道要怎么把主题排列在它的内部,IM这样做:

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

当我尝试关闭学生哈希...我能做些什么来完成这项工作?或者,实现这个最好的方法是什么?

谢谢!

回答

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 

的重要组成部分,将每个学生的科目已经存在的哈希值。

+0

完美!这是我正在寻找的。非常感谢。 – Hook

1

你的迭代是不是对我很清楚,但对电流环和阵推,你可以这样做:

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