Mongoid:在父级上运行嵌入式文档的回调

Lew*_*ewy 4 ruby mongodb mongoid

Rails 3.0.1 Mongoid(2.0.0.beta.20)

Class Post embeds_many:comments字段:comments_count结束

Class Comment
 embedded_in :commentable, :inverse_of => :comments
end
Run Code Online (Sandbox Code Playgroud)

我想选择10个评论最多的帖子.要做到这一点,我需要Post中的comments_count字段.但由于我的评论是多态的(Post.comments,Message.comments等),我不希望在Post中创建inc回调.我不想做的是在Comment中创建回调,它将更新Post中的comment_count字段.

我不知道如何从parrent文件中在Field上的嵌入式文档中执行inc操作,并从parrent文件执行此回调

bow*_*ior 7

以下是如何Post从嵌入式多态中增加Comment:

Class Comment
  after_create :update_post_comment_count

  def update_post_comment_count
    if self._parent.class == Post
      Post.collection.update( {'_id' => self._parent._id}, 
                              {'$inc' => {'comment_count' => 1}} )
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我很确定只要创建一个新的Comment就会执行这个回调,所以我认为你不必担心从父文档执行它.如果有效,请告诉我.

有关嵌入式文档中回调的更多信息,请参阅此SO答案和此Github问题.