Я построил схему модели Rails для соответствия iphone contact s, который включает в себя многозначные ассоциации электронной почты и т. Д. У меня есть действие контроллера, которое импортирует весь массив контактов (вероятно, более 1000 объектов,каждый из которых может содержать несколько объектов электронной почты).Мне нужно, чтобы это работало достаточно эффективно, поэтому я искал 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