2015-08-28 60 views
0

我使用的叫做omnicontacts的gem允許我導出我的gmail聯繫人。當我找回我的聯繫人時,我想將它們保存到名爲「聯繫人」的表格中。單獨保存一個對象數組

但是,我收到了一系列電子郵件,然後我必須在循環中查看每個電子郵件並打印出他們的電子郵件。現在我想知道如何保存它們(每封電子郵件都是它自己的)。從技術上講,我想我可以通過創建函數循環,但這會佔用大量的時間。

當接收數組時,最好的做法是什麼,然後遍歷每個數組以保存它們?

目前我做這在我的觀點:

<h1>Your Contacts</h1> 
<div class="list-group"> 
    <% @contacts.each do |contact| %> 
    <div class="list-group-item"> 
     <div class="media"> 
     <div class="media-left"> 
      <%= image_tag avatar_url(contact[:email].to_s), height: '50', width: '50', alt: "#{contact[:name]}", class: 'img-rounded img-object' %> 
     </div> 
     <div class="media-body"> 
      <h4 class="list-group-item-heading media-heading"><%= contact[:name].titleize %></h4> 
      <p class="list-group-item-text text-muted"><%= contact[:email] %> </p> 
     </div> 
     </div> 
    </div> 
    <% end %> 
</div> 

我的控制器看起來是這樣的:

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

你有多少聯繫人?你認爲什麼是「瘋狂」的時間?如果您的聯繫人數量少於或等於幾千人,則循環並保存每個聯繫人所需的時間應該相當易於管理。 –

+0

我的意思是,我想這只是我的好奇心,讓我想看看它是否能夠以1爲例,而不是1000分貝。 –

+0

此外,正如你已經有@ @ contacts'數組一樣,你不必創建新的聯繫人,你只需要在數據庫中更新他們的'email'屬性,如下面的答案所示。 –

回答

0

你實際上是通過@contacts必須循環和創建聯繫人與email屬性是這樣的:

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

因爲,每個聯繫人都有他們獨特的電子郵件,所以你不能一次創建所有的,你必須通過它們。

如果某些屬性在所有聯繫人中是通用的,那麼您可以使用update_all一次更新所有聯繫人的屬性。但是,在這種情況下,每個聯繫人的聯繫人電子郵件都不相同,因此如果沒有像上面顯示的那樣循環訪問,則無法更新它們。

+0

我不能在我的數據庫中使用update_attribute。我只是從Google獲取並顯示它們。 –

+0

好吧,我以爲你已經在你的'@ contacts'數組中擁有你的聯繫人了。如果不是,那麼你需要創建一個create call而不是update:'Contact.create(:email,contact [:email] .to_s)''。無論如何,您必須循環瀏覽它們,因爲電子郵件對於每個聯繫人都是唯一的。我已經更新了我的答案。 –

1

如果您通過聯繫人循環並單獨創建它們,則會有很多數據庫事務並且性能受到影響。我建議你使用activerecord-import https://github.com/zdennis/activerecord-import。在一個創建查詢中,您應該能夠將所有記錄插入數據庫。

+0

這是wiki中的一個例子https://github.com/zdennis/activerecord-import/wiki – Rajuk

相關問題