Activerecord:映射一对一并保留重复项

时间:2018-03-23 22:02:51

标签: activerecord

我有一个包含用户ID的数组:

UserID = [
1 
2 
3 
4 
5 
3 
2 
2 
3]

我有一个将用户ID映射到用户电子邮件的表。我正在尝试将ID与电子邮件匹配但保留重复项,因此我最终得到:

[
1@me.com 
2@me.com 
3@me.com
4@me.com 
5@me.com 
3@me.com 
2@me.com 
2@me.com 
3@me.com]

当我尝试采集或映射时:

UserInfo.where(:id => UserID).pluck(:email)

我最终得到了:

[
 1@me.com 
 2@me.com 
 3@me.com
 4@me.com 
 5@me.com]

我怎样才能得到我正在寻找的桌子?

1 个答案:

答案 0 :(得分:0)

你必须循环

ids.map{|id| UserInfo.find(id: id).email }

但是你有大量的id,你可能想要通过首先加载你需要的记录来优化它

email_hash = UserInfo.where(id: ids).inject({}) {|h, v| h[v.id] = v.email; h;}
result = ids.map{|id| email_hash[id]}