В моих рельсах приложение. У меня есть базовая модель - Пользователь. Пользователям доступно множество связанных объектов.Rails: Object destroy performance
Class User
has_many :contents, dependent: destroy
has_many :messages, dependent: destroy
has_many :ratings, dependent: destroy
has_many :groups, dependent: destroy
...
end
Когда я хочу, чтобы удалить пользователя из моей системы (уничтожить объект пользователя), она занимает около минуты, чтобы уничтожить все связанные с ним объекты. Каков наилучший способ справиться с такими случаями?
Один из способов, который приходит мне на ум:
Уничтожая в delayed_job:
Но пока точечный объект пользователя разрушается в замедленной работе, этот пользователь не должен быть виден для других. Обращайтесь к этому случаю, указав флаг - удаленный в пользовательской модели и не получая результаты. Но я также использую sphinx, и вам нужно убедиться, что этот пользователь не появляется в результатах сфинкса.
Есть ли лучший способ справиться с такими случаями?
Один из вариантов заключается в том, чтобы сначала уничтожить пользователя и делегировать уничтожение связанных объектов в отложенное задание. – tihom
Вы считали использование 'delete' вместо' destroy'?http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html – gabrielhilal
@gabrielhilal да. но в случае удаления обратные вызовы наблюдателя не будут выполняться, и мне придется делать их также вручную. Подобно уничтожению пользователя, он уничтожает группы, которые, в свою очередь, должны обновлять счетчики и удалять действия в группе. Обработка их отдельно делает сложный бит кода. Но так ли это? –