2

と を扱う Rails アプリがあるとPostsCommentsます。投稿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

ただし、アプリが問題の投稿への参照を見つけることができないため、データベースエラーが発生します(コメントがなくなったため、ここでホーマーシンプソンをキューに入れます)

これを達成するための別の方法はありますか?

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 に答える