before_create - 摧毁多个记录
问题描述:
好吧,我想在一个before_create摧毁多个记录: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中的多个记录?
答
据我所知,您无法使用:id参数将ids数组发送到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
答
如果您尝试此操作,该怎么办?
def replace_owned_items
owned_items = user.retrieve_owned_items(item).map(&:id)
Item.destroy_all(:id => owned_items) unless owned_items.blank?
end
破坏!不是一个命令。如果它不因任何原因而破坏,你将会得到一个错误。爆炸(!)将不需要进行此操作。
不那么肯定关于这个问题,但作为一个注释,你的代码行'user = self.user'和'item = self.item'是多余的,'user'和self.user'是一样的,暗示'self'。就像说我=我:) – 2010-07-14 04:09:23