投稿とコメントオブジェクトを扱うRailsアプリケーションがあるとします。 A投稿has_many
コメントと各コメントbelongs_to
投稿。レールヘルパーとコントローラメソッドを利用する
各コメントにはword_count
性質を持っています。投稿オブジェクトには、コメントのword_count
のそれぞれの平均であるaverage_comment_word_count
プロパティがあります。 Postオブジェクトは、非同期的に(コメントは平均単語数に影響を与える追加されます)に変更されます場合
最初の質問は、どの時点で、私はプロパティを再計算する必要があり、ありますか?オブジェクトが返されたら?または、新しいコメントが追加されるたびに?コメントや投稿ヘルパーメソッドに入りますか?どのコントローラ関数がこのメソッドを呼び出すべきですか?私は次のポストヘルパーメソッドが含まれている場合
はまた、私はJSONとして返さNULL値を取得します。
def average_word_count
@average_word_count = 0
# current_user returns the current user object
# user has_many posts and each post belongs_to a user
current_user.posts.find(params[:id]).comments.each do |comment|
@average_word_count += comment.word_count/current_user.posts.find(params[:id]).comments.count
end
@average_word_count
end
これは、*追加のクエリの多くを行い、*それは、非同期クエリを説明するために失敗しました。 – coreyward
@coreyward、非同期クエリの良い点ですが、追加のクエリは表示されません。各post.comments.average(:foo)は、単一のSQL文を作成します。 – Mori
私はこのアプローチを顧客カウンターキャッシュよりも実装しやすく(そしてより一般的です)、それが受け入れられたとマークしている理由です。 –