Настройка производительности для запросов активной записи rails

У меня есть приложение rails, в котором есть несколько моделей. Например, ввод модели со следующими ассоциациями: -

belongs_to :department, :class_name => 'Department'

has_many :frame_inputs, class_name: 'Frames::FrameInput', foreign_key: 'input_id', :dependent => :destroy
has_many :frames, :through => :frame_inputs, :class_name => 'Frames::Base'

has_many :scales, :foreign_key => :input_id, :dependent => :destroy
has_many :input_items, :class_name => 'InputItems::Base', :foreign_key => :department_id, :dependent => :destroy
has_many :linenumbers, :class_name => 'Frames::InputItemPriority', :through => :input_items

Проблема: - Всякий раз, когда вы пытаетесь удалить входную запись из приложения, серверный запрос активной записи занимает много времени, то есть 10–20 секунд для завершения одной транзакции.

Вопрос: Поскольку он должен уничтожить все зависимости записей, могу ли я уменьшить время транзакции для выполнения запроса на удаление/уничтожение?

Для уничтожения записей у меня есть следующий метод в моем контроллере ввода

def destroy
 @input.destroy
end

Пожалуйста, подскажите, как оптимизировать запрос на уничтожение, чтобы сократить время транзакции.

Спасибо


person Metal    schedule 11.03.2014    source источник


Ответы (1)


:destroy фактически создаст связанные записи, а также вызовет обратные вызовы, поэтому это намного дороже, чем использование :delete_all.

Если у вас нет никаких обратных вызовов, которые вам нужно перезапустить, и вам просто нужно удалить связанные записи, используйте последний.

См. здесь: Rails :dependent =› :destroy VS :dependent =› :delete_all< /а>

person tirdadc    schedule 11.03.2014