before_create - 销毁多个记录

时间:2010-07-14 03:45:03

标签: ruby-on-rails callback destroy

好的,我正在尝试销毁before_create中的多个记录:

class InventoryItem < ActiveRecord::Base
  belongs_to :user
  belongs_to :item

  before_create :replace_owned_items

  protected

  def replace_owned_items
    user = self.user
    item = self.item

    owned_items = user.retrieve_owned_items(item)
    unless owned_items.blank?
      owned_items.each do |o|
        o.destroy
      end
    end
  end

end

我的问题是只有一条记录最终被销毁。

另一个是如果我使用破坏! (如果不破坏,我想要引发异常),然后我完全得到一个错误。

如何在before_create中完成销毁多条记录?

2 个答案:

答案 0 :(得分:2)

如果你试试这个怎么办?

def replace_owned_items
  owned_items = user.retrieve_owned_items(item).map(&:id)
  Item.destroy_all(:id => owned_items) unless owned_items.blank?
end

灭!不是命令。如果它因任何原因没有破坏,你将收到错误。这个操作不需要爆炸(!)。

答案 1 :(得分:1)

据我所知,您不能使用:id参数将destroy数组发送到destroy_all。我会像这样调整一个:

def replace_owned_items
  owned_items = user.retrieve_owned_items(item).map(&:id)
  for item in owned_items do
    Item.destroy(item.to_i)
  end
end

但我认为之前你所拥有的应该可以正常工作(我的下面假设如果没有,则retrieve_owned_items会返回一个空白数组:

def replace_owned_items
  owned_items = user.retrieve_owned_items(item)
  for item in owned_items
    item.destroy
  end
end