分别保存一组对象

时间:2015-08-28 04:21:44

标签: ruby-on-rails ruby

我正在使用名为omnicontacts的gem,它允许我导出我的Gmail联系人。当我检索到我的联系人时,我想将它们保存到一个名为联系人的表中。

但是我接收了一系列电子邮件,然后我必须循环浏览每一封电子邮件并打印出他们的电子邮件。现在我想知道如何保存所有这些(每封电子邮件都是自己的)。从技术上讲,我想我可以循环创建一个函数,但这会花费大量的时间。

接收数组然后循环遍历每个数组以保存数组时,最佳做法是什么?

目前我在我看来这样做:

def create
  @imported_contacts = request.env['omnicontacts.contacts']
  @user = request.env['omnicontacts.user']    
end

我的控制器看起来像这样:

Pending.dbo

2 个答案:

答案 0 :(得分:1)

如果您遍历联系人并单独创建它们,则会有很多数据库事务并且性能会受到影响。我建议你使用activerecord-import https://github.com/zdennis/activerecord-import。在一个创建查询中,您应该能够将所有记录插入到数据库中。

答案 1 :(得分:0)

您实际上必须遍历@contacts并使用email属性创建联系人,如下所示:

@contacts.each {|contact| Contact.create(email: contact[:email].to_s)}

因为,每个联系人都有自己独特的电子邮件,因此您无法一次创建所有这些邮件,因此您必须遍历它们。

如果某个属性在所有联系人中都很常见,那么您可以使用update_all一次更新所有联系人的属性。但是,在这种情况下,联系人电子邮件对于每个联系人都是不同的,因此您无法像上面所示那样循环更新它们。