2012-04-02 4 views
3

私は何時間も問題を抱えており、Googled myself senselessです。埋め込み文書を削除しているモンゴイドが残っていません

私が埋め込まれた文書とMongoidモデルを持っているが、そのよう:何らかの理由で

embeds_many :tags, :as => :taggable 

、この文書を削除しようとすると、コンソールで動作しているように見えますが、その後の文書​​は、リロード後に戻ってきます。私は以下を試しました:

model.tags.delete_all 

model.tags.each do |tag| 
    tag.delete 
end 

model.tags.destroy_all 

上記のすべての後、model.tagsが空の配列を返すことが確認できます。それから、安全のために、私はmodel.saveを呼び出します。モデルをリロードすると、すべての埋め込みタグが戻ってきます。

Mongoidを使用して埋め込みドキュメントを削除する正しい方法は何ですか?

+0

を取得する方法は何ですか? – shingara

答えて

7

まあその非常にシンプルですがトリッキー...

あなたがタグを削除すると、あなたは親オブジェクトをリロードする必要があります。

コード

model.tags.delete_all 
model.reload 

model.tags.each do |tag| 
    tag.delete 
end 
model.reload 

model.tags.destroy_all 
model.reload 

これは、あなたのモデルが再ロードされますと、あなたは右のオブジェクトに使用するバージョンまたはMongoid

+0

ねえ、再ロードせずに複数の埋め込みタスクを一度に削除する方法はありますか?部分destroy_allのような? –

+0

あなたのコメントはありませんでした。もう少し説明してもらえますか? –

+0

申し訳ありませんが、私は実際に別にそれを作成しました:https://stackoverflow.com/questions/45615471/mongoid-delete-a-subset-of-invalid-embedded-documents-in-one ~go –

関連する問題