使用Rails 3.2。我听说delete
比destroy
快,而delete
不会进行回调,但我不确定如何使用delete
。我有以下作为Rake任务:
# shop.rb
class Shop < ActiveRecord::Base
has_many :reviews, dependent: :destroy
end
# review.rb
class Review < ActiveRecord::Base
belongs_to :shop
end
# shop.rake
desc "Delete shops"
task :destroy_shops => :environment do
Shop.find_by_sql("SELECT id FROM shops WHERE shop_status = 0").destroy_all
end
当然这不起作用,因为destroy_all
不会在对象数组上运行。快速消灭shops
及其同伙的最佳方法是什么?请注意,review
只是shop
的众多合作伙伴之一。
另请注意,我的SQL
已经简化了。我有更复杂的查询连接表来检索不需要的shops
。我只是简化了这个问题。
答案 0 :(得分:0)
您可以使用
Shop.find_by_sql(...).map(&:destroy)
它应该与destroy_all具有完全相同的行为:“Destroys the records matching conditions by instantiating each record and calling its destroy method”