Posts
とComments
を扱うRailsアプリケーションがあるとします。 A投稿has_many
コメントと各コメントbelongs_to
投稿。アクティブなレコードコールバックを使用してモデル属性を更新する
各コメントはword_count property
です。投稿オブジェクトには、コメントのword_count
のそれぞれの平均であるaverage_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
これを達成する別の方法はありますか?
私が使用している場合は、 'before_destroy'私は平均を計算するときに破壊されるコメントを除外する必要がありませんでしょうか? –
はい、そうです。 'post.update_attributes average_word_count:(post_average_word_count - self.word_count)' – DanS
オブジェクトが破壊された後にオブジェクトの「所有者」を保存する方法はありませんか?私はすでに 'Comment'で書かれたメソッドを持っていて、メソッドの重複を避けたい(またはすべてのコードを' Post'に移動させたい) –