如何在ruby哈希中为特定键创建值数组?

时间:2013-03-11 22:30:49

标签: ruby map

我们的rails应用中有useruser_level个模型。在user_level中有一个名为user_group_id的字段。关系为user has_many user_levels。我们想为给定的user_group_id生成user_id(在user_level中)的数组。

对于给定的user_id,其user_levels可以检索为:

u = User.find(user_id)
ul = u.user_levels

user_levels可能有多个user。如何使用ruby user_group_id(或其他一些ruby方法(首选红宝石))从ul创建map数组?感谢。

2 个答案:

答案 0 :(得分:4)

试试这个,

user = User.find(user_id)
user.user_levels.pluck(:user_group_id)

或者,

user.user_levels.map(&:user_group_id)

第一个是单独的数据库查询,只选择:user_group_id。例如,在MySQL中它会调用SELECT user_levels.user_group_id ...

第二个从提取的:user_group_id收集user_levels

答案 1 :(得分:1)

您确实在寻找map

user_group_ids = ul.map{|x| x.user_group_id}

或者用速记:

user_group_ids = ul.map(&:user_group_id)

您可能还希望只有不同的ID,而不是nil s

user_group_ids = ul.map(&:user_group_id).uniq.compact