我目前正在使用以下内容来获取表格中某个字段的数组:
Classrooms.all.map(&:teacher_name)
返回以下内容:
["James", "Josh", "Peter"]
我想要的是哈希,所以我可以在下面包含teacher_id:
{"James" => "1", "Josh" => "2", "Peter" => "3"}
我尝试使用Classrooms.all.map(&:teacher_name, &:teacher_id)
,但它给我一个语法错误。
谢谢!
答案 0 :(得分:3)
以老式的方式做到:
pairs = Classrooms.all.map {|t|
[t.teacher_name, t.teacher_id] # [key, value]
}
hash = Hash[pairs] # in /old/ ruby: Hash[*pairs.flatten]
..或诸如此类的。
答案 1 :(得分:1)
另一种选择是不要使用每种方法。请改用each_with_object。它专为您的目标而设计。
Classrooms.all.each_with_object({}) { |c, hash| hash[c.teacher_name] = c.teacher_id }
答案 2 :(得分:1)
Ruby 2.6.0启用shorter syntax:
Classrooms.all.to_h { |t| [t.teacher_name, t.teacher_id] }