2010-08-29 222 views
0

我正在使用rails中的'contacts'gem从其邮件应用程序中检索用户联系人。它返回像接触,使:将一个阵列与另一个阵列进行比较

["person name", "[email protected]"], ["person name", "[email protected]"], ["person name", "[email protected]"] etc... 

我想比较这名单已经在我的网站

Users.find签约用户(:所有)返回:

[#<User id: 11, login: "examplelogin", email: "[email protected]">, #<User id: 12, login: "examplelogin", email: "[email protected]">, etc... ] 

什么是将gmail联系电子邮件与用户电子邮件进行比较并仅显示匹配的电子邮件的最佳方式?

我的想法是这样的:

@contacts = Contacts::Gmail[params[:from]].new(params[:login], params[:password]).contacts 
@contacts.each do |c| 
    @email = c[1] 
    @user = Users.find_by_email(@email) 
end 

这大概只返回那里有一个匹配的用户。我觉得我必须有一个更好的方式来解决这个问题,这是我不考虑的。有什么建议么?

回答

2
@users = Users.find_all_by_email(@contacts.collect{|contact| contact[1]}) 

编辑:

你有什么之前,会为每个联系人执行查找,让你仅与上次查询的结果,无论是用户还是不依赖于是否与此电子邮件存在一个。这将执行一个查询并返回所有成功匹配的数组:

where 'users'.'email' in array_of_email_addresses. 
+1

像一个魅力一样工作!这只是做我上面描述的一个速记方式吗? – goddamnyouryan 2010-08-29 07:08:43

+0

不是真的,编辑过我的帖子。 :) – mark 2010-08-29 07:23:15

相关问题