私はかなり新しいレールです&私はこの性能の問題を抱えています。Rails既存のオブジェクトとの関連付けを熱望しています
私はユーザモデルに&のhas_many UserScoresが関連付けられています。私は特定の条件に基づいてuser_scoresのカウントを含むさまざまなユーザー統計を示すダッシュボードを準備しています。ここでは、コードの抜粋です:
def dashboard
@users = Array.new
users = User.order('created_at ASC')
users.each do |u|
user = {}
user[:id] = u.id
user[:name] = u.nickname
user[:email] = u.email
user[:matches] = u.user_scores.count
user[:jokers_used] = u.user_scores.where(:joker => true).length
user[:jokers] = u.joker
user[:bonus] = u.user_scores.where(:bonus => 1).length
user[:joined] = u.created_at.strftime("%y/%m/%d")
if user[:matches] > 0
user[:last_activity] = u.user_scores.order('updated_at DESC').first.updated_at.strftime("%y/%m/%d")
else
user[:last_activity] = u.updated_at.strftime("%y/%m/%d")
end
@users << user
end
@user_count = @users.count
エンド
私は見ています問題は、別のカウントを取得するために、ユーザーごとに繰り返さUserScoreデシベルクエリです。
複数のクエリを避ける方法はありますか?
N.B.私はビューのためのデータを準備するための私のアプローチが最適な方法であるかどうか分からないので、それに関するアドバイスやヒントも高く評価されます。
おかげまず
私はそれを試しましたが、まだuser_scoresの複数のクエリが各ユーザに起こっていました – PeterB
あなたの関連付けが既にプリロードされていても、 'where'がデータベースに新しいクエリを作成するためです。 'u.user_scores.where(:joker => true).length' と' u.user_scores.where(:bonus => 1)の代わりに。長さ ' try: 'u.user_scores.any? {|私| us.joker} ' と' u.user_scores.any? {|私| us.bonus == 1} ' おそらく' .user_scores.order( 'updated_at DESC')。first.updated_at.strftime( "%y /%m /%d") 'どういうわけか –
それを試してみて、私にこのエラーを教えてください 引数の数が間違っています(0の場合は1) – PeterB