3

我目前正在使用以下内容来获取表中某个字段的数组:

Classrooms.all.map(&:teacher_name)

这将返回以下内容:

["James", "Josh", "Peter"]

我想要的是一个哈希而不是像下面这样我可以包含teacher_id的东西:

{"James" => "1", "Josh" => "2", "Peter" => "3"} 

我尝试使用Classrooms.all.map(&:teacher_name, &:teacher_id),但它给了我一个语法错误。

谢谢!

4

3 回答 3

5

用老式的方法来做:

pairs = Classrooms.all.map {|t|
  [t.teacher_name, t.teacher_id]  # [key, value]
}
hash = Hash[pairs]                # in /old/ ruby: Hash[*pairs.flatten]

..或诸如此类。

请参阅在 Ruby 中,如何从数组中生成散列?

于 2012-07-12T04:08:26.873 回答
2

Ruby 2.6.0 启用了更短的语法

Classrooms.all.to_h { |t| [t.teacher_name, t.teacher_id] }
于 2019-01-03T13:20:40.053 回答
1

另一种选择是根本不使用每个。请改用 each_with_object。它专为您尝试做的事情而设计。

Classrooms.all.each_with_object({}) { |c, hash| hash[c.teacher_name] = c.teacher_id }
于 2012-07-12T12:01:35.650 回答