我有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
请指导我如何优化销毁查询以减少交易时间。
由于
答案 0 :(得分:1)
:destroy
实际上会实例化相关记录并触发回调,因此比使用:delete_all
要贵得多。
如果您没有任何回调需要重新运行,只需要删除相关记录,请使用后者。
见这里:Rails :dependent => :destroy VS :dependent => :delete_all