0
我正在查看我的服務器日誌,並且有很多來自特定查詢的SELECT
語句。我知道n+1問題,這似乎是一個。但是我不確定這個查詢的解決方案是什麼。這是一個單一的查詢或多個返回的每個用戶(我相信WHERE
是一個單一的查詢)?避免n + 1在哪裏查詢活動記錄
User.where(profile_type: self.profile_type).where.not(id: black_list)
編輯:
user.rb
def suggested_friends
black_list = self.friendships.map(&:friend_id)
black_list.push(self.id)
return User.where(profile_type: self.profile_type).where.not(id: black_list)
end
index.json.jbuilder
json.suggested_friends @user.suggested_friends do |friend|
json.set! :user_id, friend.id
json.(friend.profile, *friend.profile.attributes.keys)
end
問題離開了includes(:profile)
。使用下面的查詢解決我的問題
User.where(profile_type: self.profile_type).where.not(id: black_list).includes(:profile)
,謝謝你的評論指出我在正確的方向
你能發表更多的代碼嗎?在這種情況下自我是什麼?什麼是'black_list'?你是如何獲得black_list變量的? –
什麼是self.profile_type和black_list? – gabrielhilal
這將生成一個SQL查詢。但是,您可能會多次調用這一行代碼。我認爲你需要添加更多的上下文。 –