2011-07-28 4 views
2

SinatraとMongoidを使用してMongoDBにアクセスしています。オブジェクトを削除しようとすると、オブジェクトは削除されますが、データベースに残っているように見えます。MongoidはMongoオブジェクトを削除しません

u = User.find(user_id) 
u.delete 

は、これが動作しているようですし、エラーを生成しませんが、私はこれを確認するために、モンゴコンソールを使用してデータベースを確認したときに、オブジェクトがまだあります。ユーザーオブジェクトはキャップ付きコレクションにありません。

u = User.find(user_id) 
u.delete 
u = User.find(user_id) 

この変更により、オブジェクトが正常に削除されたというエラーが生成されます。それにもかかわらず、Mongoコンソールでは、ユーザーコレクションのfind()呼び出しでもオブジェクトが表示されます。

+1

あなたのモデルには 'Mongoid:Paranoia'が含まれていますか?デフォルト動作では、deleted_atを使用しないでください。 http://mongoid.org/docs/extras.html –

+0

Thanks Tedをご覧ください。あなたは正しいパラノイアがモデルにあり、私は "u.delete!"を使用する必要があります。本当にオブジェクトを削除する。 – Scott

答えて

1

MongoDBオブジェクトはデータベースから消去されませんが、「deleted_at」パラメータがオブジェクトに追加され、オブジェクトが「削除された」ときを示します。その後、オブジェクトは検索で見つからないでしょう。

+0

ありがとうLior。 "deleted_at"がオブジェクトに追加されたことは間違いありませんでした。私の開発者は、削除を防ぐためにユーザモデルにパラノイアを含んでいます。本当にオブジェクトを削除することを学んだので、 "u.delete!"を使う必要があります。私が使っていた標準の "user.delete"ではありません。 – Scott