2010-07-14 80 views
0

好吧,我想在一个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中的多个记录?

+1

不那么肯定关于这个问题,但作为一个注释,你的代码行'user = self.user'和'item = self.item'是多余的,'user'和self.user'是一样的,暗示'self'。就像说我=我:) – 2010-07-14 04:09:23

回答

1

据我所知,您无法使用: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 
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 

破坏!不是一个命令。如果它不因任何原因而破坏,你将会得到一个错误。爆炸(!)将不需要进行此操作。