使用活动记录回调更新模型属性



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

每个注释都有一个word_count property。Post 对象有一个 average_comment_word_count 属性,该属性是每个注释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

但是我收到数据库错误,因为该应用程序找不到对相关帖子的引用(因为评论消失了,请在此处提示荷马辛普森)

有没有其他方法来实现这一点?

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

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

最新更新