我是相當新的rails &我遇到了這個性能問題,我將不勝感激任何幫助。Rails急需爲現有對象加載has_many關聯
我有一個用戶模型&每個用戶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(:百搭=>真).length' 和'u.user_scores.where(:獎金=> 1)。長度' 嘗試: 'u.user_scores.any? {| us | us.joker}' 和'u.user_scores.any? {| us | us.bonus == 1}' 您可能不得不重寫'.user_scores.order('updated_at DESC')。first.updated_at.strftime(「%y /%m /%d」)'不知何故 –
嘗試它並給我這個錯誤 錯誤的參數數量(1爲0) – PeterB