2010-07-14 102 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 

破壞!不是一個命令。如果它不因任何原因而破壞,你將會得到一個錯誤。爆炸(!)將不需要進行此操作。