2011-01-22 1 views
1

나는 두 가지 모델, 사용자 및 코드 조각이 : 나는 조각을 표시하고있어, 나는이 사용하고DataMapper이 작품을 삭제하지만 내 응용 프로그램 다시 시작 후

class User 
    include DataMapper::Resource 

    property :id,Serial 
    ... 
    has n,:snippets 
end 

class Snippet 
    include DataMapper::Resource 

    property :id,Serial 
    ... 
    belongs_to :user 
end 

:

snippets = user.snippets 

을 그리고 내가 그들을 삭제할 때 나는 이것을 사용하고있다 :

snippet = Snippet.first(:user_id => user.id,:id => snip_id) 
if snippet 
    destruction_res = snippet.destroy 
    ... 
end 

사실 destruction_res는 항상 true를 반환한다. 스 니펫을 삭제 한 후 사용자 저장을 시도했습니다. 그것은 또한 사실로 돌아갔다.

snippets = user.snippets 

가 파괴되어 있어야 스 니펫을 포함, 전체 목록을 반환 내가 코드를 사용하는보기에 액세스 할 때 일이다. 그러나 응용 프로그램을 다시 시작하면 올바른 목록이 표시됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 어떻게 든 데이터베이스에 커밋해야합니까?

답변

2

스 니펫을 삭제하기 전에 스 니펫 컬렉션을로드 한 다음 해당 컬렉션에 다시 액세스해도 여전히 삭제 된 스 니펫이 포함되어있을 수 있습니다. BTW

user.snippets.reject!(&:destroyed?) 

-이 같은 조각을 파괴 할 수있다 : 그런 경우에는, 당신은 그런 파괴 조각을 거부 할 수 있습니다

user.snippets.get(snip_id).destroy 

좋네요 :)

+0

예, 내가 가진 약간 기억에있는 수집 및 이것은 침묵하는 벌레이었다. 필자는 그것을 다시 작성했지만 이제는 정상적으로 작동하지만 여전히 개체가 데이터베이스에보다 잘 묶일 것으로 기대했을 것입니다. 교훈을 얻었습니다. 가정을하지 마십시오. – Geo