2010-07-14 5 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'가 함축되어 있습니다. 나 = 나 말하고있는 것 같다 :) –

답변

1

내가 알고있는 한 : id 매개 변수를 사용하여 destroy_all에 ID 배열을 보낼 수 없습니다. 이 같은 하나 조정할 것 :

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 

파괴하십시오! 명령이 아닙니다. 어떤 이유로 든 파괴하지 않으면 오류가 발생합니다. bang (!)은이 작업에 필요하지 않습니다.