只是一个简短的问题。
u.quizzes.group_by(&:section_id)
回复我
{1=>
[#<Quiz id: 263, user_id: 2, exam_or_section: "section", section_id: 1>,
#<Quiz id: 264, user_id: 2, exam_or_section: "section", section_id: 1>,
#<Quiz id: 265, user_id: 2, exam_or_section: "section", section_id: 1>,
#<Quiz id: 266, user_id: 2, exam_or_section: "section", section_id: 1>,
#<Quiz id: 267, user_id: 2, exam_or_section: "section", section_id: 1>,
#<Quiz id: 268, user_id: 2, exam_or_section: "section", section_id: 1>],
2=>[#<Quiz id: 269, user_id: 2, exam_or_section: "section", section_id: 2>],
3=>[#<Quiz id: 270, user_id: 2, exam_or_section: "section", section_id: 3>]}
是否有一种简单的方法来获取ids数组而不是对象?
{1=> [263,264,265, 266, 267, 268], 2=>[269], 3=> [270]}
谢谢
答案 0 :(得分:1)
u.quizzes.select(:id, :section_id).group_by(&:section_id).each {|k, v| v.map!(&:id) }
select并不是严格要求但应该使用,因为其他字段没有以任何方式使用,你会在数据库和rails之间传输无用的数据。
答案 1 :(得分:0)
您可以使用map
:
u.quizzes.group_by(&:section_id).map { |item|
[item.first, item.last.map { |q| q.id } ]
}.to_h
希望它有所帮助。
答案 2 :(得分:0)
这样做会非常好。
u.quizzes.reduce({}) { |hash, quiz|
hash[quiz.section_id] = Array(hash[quiz.section_id]) << quiz.id
hash
}
正如p11y建议each_with_object
。
u.quizzes.each_with_object({}) { |quiz, hash|
hash[quiz.section_id] = Array(hash[quiz.section_id]) << quiz.id
}