在Rails中销毁对象数组及其关联

时间:2014-02-08 08:43:31

标签: ruby-on-rails ruby-on-rails-3

使用Rails 3.2。我听说deletedestroy快,而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。我只是简化了这个问题。

1 个答案:

答案 0 :(得分:0)

您可以使用

Shop.find_by_sql(...).map(&:destroy)

它应该与destroy_all具有完全相同的行为:“Destroys the records matching conditions by instantiating each record and calling its destroy method