我们的rails应用中有user
和user_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
数组?感谢。
答案 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