1

Mongoid 2.4 を実行している Sinatra アプリケーションの埋め込みドキュメントを削除する際に問題が発生しました。私のモデルの関係の基本的な概要は次のとおりです。

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 は失敗します。2 レベル深くはできないようです。

# 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

どうすれば削除できますか?

4

1 に答える 1