2012-12-13 65 views
1

我一直在我的Sinatra應用程序中刪除嵌入文檔,運行Mongoid 2.4時出現問題。這裏是我的模型關係的基本概況:在Mongoid中刪除2級深度嵌入文檔

class User 
    has_many :posts 
end 

class Post 
    belongs_to :user 
    embeds_many :comments 
    embeds_many :likes, as: :likeable 
end 

class Comment 
    field :poster_id, type: String 
    embedded_in :post 
    embeds_many :likes, as: :likeable 
end 

class Like 
    field :user_id, type: String 
    embedded_in :likeable, polymorphic: true 
end 

缺失代碼開始就是這樣,沒有問題:

# Deletes comments the user created 
Post.where('comments.poster_id' => params[:userid]).each do |post| 
    post.comments.where(poster_id: params[:userid]).delete_all 
end 

# Delete likes on posts the user created 
Post.where('likes.user_id' => params[:userid]).each do |post| 
    post.likes.where(user_id: params[:userid]).delete_all 
end 

但是,試圖刪除的帖子的評論喜歡時,mongoid失敗。它似乎不能兩層深:

# Delete likes on comments the user created (broken) 
Post.where('comments.likes.user_id' => params[:userid]).each do |post| 
    post.comments.likes.where(user_id: params[:userid]).delete_all 
end 

我該如何刪除它們?

回答

2
# Delete likes on comments the user created (not broken anymore) 
Post.where('comments.likes.user_id' => params[:userid]).each do |post| 
    post.comments.each {|c| c.likes.where(user_id: params[:userid]).delete_all } 
end 

您需要迭代評論,comments.likes必須給你錯誤,不是嗎?

+0

您的解決方案完美無瑕。非常感謝你的快速回復,我希望它能幫助別人。 –