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