0

好的,我正在尝试销毁 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 中完成销毁多条记录?

4

2 回答 2

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

破坏!不是命令。如果由于某种原因它没有破坏,你会得到一个错误。此操作不需要 bang(!)。

于 2010-07-14T04:22:01.707 回答
1

据我所知,您不能使用 :id 参数将 ID 数组发送到 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
于 2010-07-14T13:08:08.357 回答