2011-01-22 70 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 

事情是,destroy_res總是返回true。我在刪除代碼段後嘗試保存用戶。它也是如此。事情是,當我訪問使用代碼的視圖時:

snippets = user.snippets 

它返回完整列表,包括應該銷燬的代碼片段。但是,如果我重新啓動應用程序,我會看到正確的列表。我究竟做錯了什麼?我應該以某種方式強制提交數據庫?

回答

2

您可能在銷燬代碼段之前加載代碼段集合,然後再次訪問該集合,並且它仍包含已刪除的代碼段。如果是這樣的話,你可以拒絕這樣的一個毀壞片段:

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

順便說一句 - 你可以摧毀這樣一個片段:

user.snippets.get(snip_id).destroy 

更好一點:)

+0

是的,我有內存中的集合,這是無聲的錯誤。我重寫了它,現在它工作正常,但是,我仍然期望這些對象與數據庫「更好地綁定」。獲得的教訓,不要做假設:) – Geo 2011-01-22 22:08:09

相關問題