У меня есть 3 модели в моем приложении rails
class Contact < ActiveRecord::Base
belongs_to :survey, counter_cache: :contact_count
belongs_to :voter
has_many :contact_attempts
end
class Survey < ActiveRecord::Base
has_many :questions
has_many :contacts
end
class Voter < ActiveRecord::Base
has_many :contacts
end
Контакт состоит из voter_id и survey_id. Логика моего приложения заключается в том, что в любом опросе может быть только один контакт для избирателя.
прямо сейчас я использую следующий код для обеспечения соблюдения этой логики. Я запрашиваю таблицу контактов для записей, соответствующих данным voter_id и survey_id. если не существует, то создается. иначе он ничего не делает.
if !Contact.exists?(:survey_id => survey, :voter_id => voter)
c = Contact.new
c.survey_id = survey
c.voter_id = voter
c.save
end
Очевидно, для этого требуется запрос выбора и вставки для создания 1 потенциального контакта. Когда я добавляю потенциально тысячи контактов сразу.
Сейчас я использую Resque, чтобы разрешить этот прогон в фоновом режиме и подальше от нити ui. Что я могу сделать, чтобы ускорить это и сделать его более эффективным?