簡體   English   中英

將iPhone聯系人與Rails同步

[英]Syncing iphone contacts with Rails

我建立了Rails模型架構以匹配iphone contact ,其中包括多值電子郵件關聯等。我有一個控制器操作,可以導入整個聯系人數組(可能有1,000多個對象,每個對象可能包含多個電子郵件對象)。 我需要它能相當高效地運行,因此我正在查看activerecord-import以進行批量導入。 但是,我需要在每個聯系人的范圍內驗證電子郵件的唯一性,以免每次導入批次時都不斷添加重復項。 我應該手動構建自己的update_attributes版本,還是應該推薦現有的解決方案來驗證/更新大量記錄?

接觸模型

class Contact > ActiveRecord::Base
  has_many :addresses
  has_many :emails
  has_many :websites
  accepts_nested_attributes_for :addresses, :emails, :websites
  attr_accessible :prefix, :first_name, :middle_name, :last_name, :suffix,
                  :nickname, :organization, :job_title, :department, :birthday,
                  :addresses_attributes, :emails_attributes, :websites_attributes                  
end

電子郵件模式

class Email > ActiveRecord::Base
  belongs_to :contact
  # validates_uniqueness_of :account, :scope => :contact_id # prevents duplicate, but also skips sibling values
  # validates :contact_id, :presence => true, :on => :create # causes 422 error
  validates :account, :presence => true, :format => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i, :on => :create
  attr_accessible :contact_id, :email_id, :account, :label
end

為此,activerecord-import中沒有內置支持。

但是,如果在導入時同時知道contact_id和電子郵件地址,則可以在contact_id和電子郵件地址上使用唯一索引。 在MySQL中,可以使用ON DUPLICATE KEY UPDATE支持(activerecord-import確實支持this )不導入重復項,而是更新現有記錄。 使用MySQL,您還可以使用INSERT IGNORE(activerecord-import支持此功能),在導入導致索引沖突的記錄時,該操作將忽略任何錯誤(這是避免重復的另一種方法)。

如果使用的是PostgreSQL或SQLite之類的其他RDMS,則需要查看其文檔,以了解如何忽略違反關鍵約束的條件(例如INSERT IGNORE)。 我不相信任何一種都支持開箱即用的ON DUPLICATE KEY UPDATE。

如果您在導入時不知道contact_id和電子郵件地址,則必須在代碼中做一些前期工作,以獲取有關要復制還是創建的足夠信息。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM