2012-12-13 33 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

您的解决方案完美无瑕。非常感谢你的快速回复,我希望它能帮助别人。 –