Mongoid: запуск обратного вызова из встроенного документа на родительском - PullRequest
4 голосов
/ 08 декабря 2010

Rails 3.0.1 Mongoid (2.0.0.beta.20)

Сообщение класса embeds_many: поле комментариев: комментарий_count конец

Class Comment
 embedded_in :commentable, :inverse_of => :comments
end

Я хочу выбрать 10 наиболее комментируемых сообщений,Для этого мне нужно поле comments_count в Post.Но так как мой комментарий полиморфен (Post.comments, Message.comments и т. Д.), Я не хочу создавать обратные вызовы inc в Post.Что я не хочу делать, так это создать обратный вызов в Comment, который обновит поле comment_count в Post.

Я не знаю, как я могу выполнить операцию inc во встроенном документе над Field из parrent-документа и выполнить этот обратный вызов изотдельный документ

1 Ответ

6 голосов
/ 08 декабря 2010

Вот как увеличить 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

Я уверен, что этот обратный вызов будет выполняться всякий раз, когда создается новый комментарий, поэтому я не думаю,вам нужно беспокоиться о выполнении этого из родительского документа.Дайте мне знать, если это работает.

См. этот SO-ответ и этот выпуск Github для получения дополнительной информации о обратных вызовах во встроенных документах.

...