2011-01-22 3 views
1

私は2つのモデル、ユーザとスニペットを持っている:私はスニペットを表示していたとき、私はこの使用してい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

スニペットを破棄する前にスニペットコレクションを読み込み、そのコレクションに再度アクセスして、それに削除されたスニペットが残っている可能性があります。ところで

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

- あなたはこのようにスニペットを破壊することができます:そのような場合、あなたはそのような破壊されたスニペットを拒否することができ

user.snippets.get(snip_id).destroy 

ビットよりよい:)

+0

はい、私が持っていましたメモリ内のコレクション、これは静かなバグでした。私はそれを書き直しましたが、現在はうまくいきますが、オブジェクトがデータベースに「より良く結びついている」ことが予想されます。レッスンは学んだ、仮定をしないでください:) – Geo

関連する問題