2

假设我有一个 Rails 应用程序处理PostsComments. 一个帖子has_many评论和每个评论belongs_to一个帖子。

每个评论都有一个word_count property. Post 对象有一个average_comment_word_count属性,它是每个 Comment 的平均值word_count

DELETE当我针对特定评论发送请求时,应用程序应重新计算average_comment_word_count参数。我认为它的工作方式是这样的:

class Comment < ActiveRecord::Base

belongs_to :user
belongs_to :post
after_destroy :update_post_average_word_count

def update_post_average_word_count
  post_average_word_count = 0
  post.comments.each do |comment|
     post_average_word_count = post_average_word_count + comment.word_count
  end

  post_average_word_count / post.comments.count
  post.update_attributes average_word_count: post_average_word_count
end

但是我收到一个数据库错误,因为该应用程序找不到对相关帖子的引用(因为评论已经消失,请在此处提示 Homer Simpson)

有没有不同的方法来完成这个?

4

1 回答 1

2

在计算 post_average_word_count 时使用before_destroy并考虑到这一点:

post.update_attributes average_word_count: (post_average_word_count - self.word_count)

于 2012-04-18T20:23:10.257 回答