【问题标题】:Comparing one array against another in rails在rails中比较一个阵列和另一个阵列
【发布时间】:2010-08-29 06:41:49
【问题描述】:

我正在使用 rails 中的“联系人”gem 从他们的邮件应用程序中检索用户联系人。它像这样返回联系人:

["person name", "personemail@example.com"], ["person name", "personemail@example.com"], ["person name", "personemail@example.com"] etc...

我想将此列表与已注册我网站的用户进行比较

Users.find(:all) 返回:

[#<User id: 11, login: "examplelogin", email: "example@example.com">, #<User id: 12, login: "examplelogin", email: "example@example.com">, 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

这大概只会返回匹配的用户。我觉得必须有更好的方法来解决这个问题,我没有考虑。有什么建议吗?

【问题讨论】:

    标签: ruby-on-rails arrays api comparison gmail


    【解决方案1】:
    @users = Users.find_all_by_email(@contacts.collect{|contact| contact[1]})
    

    编辑:

    您之前会为每个联系人执行查找,并只留下最后一个查询的结果,无论是用户还是非用户,这取决于是否存在此电子邮件。这将执行一个查询并返回所有成功匹配的数组:

    where 'users'.'email' in array_of_email_addresses. 
    

    【讨论】:

    • 工作就像一个魅力!这只是我上面描述的一种速记方式吗?
    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 2015-06-05
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    相关资源
    最近更新 更多