2016-07-11 52 views
0

我已經開始使用query-analyzer並且它警告我關於相同的查詢。如何在檢索模型中的記錄時減少相同查詢的數量

對於情況下,我在頁面上加載25 「上崗」,而當前用戶可以 「明星」 後:

0.018s 25次相同的查詢SELECT SQL_NO_CACHE N AS one FROM 'stars' WHERE 'stars'.'post_id' = N AND 'stars'.'user_id' = N LIMIT N

這是用戶模型中的方法:

def has_starred_post?(post) 
    return false if post.nil? 

    Star.where(post_id: post.id, user_id: self.id).exists? 
end 

如何通過減少數量來滿足此警告o f查詢?


更新:

每泰倫東的提示,我更新了User模型方法:

def has_starred_post?(post) 
    return false if post.nil? 

    self.stars.where(post_id: post.id).exists? 
    # OR post.stars.where(:user_id => self.id).exists? 
end 

雖然這讓我聯想到/高速緩存屬於用戶的星星,我還是必須使用where來檢查這些明星是否屬於該帖子。對?

回答

1

您可以通過使用關聯來減少這種重複查詢 - 這些關聯會被Rails自動緩存。

class Post 
    has_many :stars 


class User 
    def has_starred_post?(post) 
    return false if post.nil? 

    post.stars.exists? 
    end 

或重新組織起來是有意義的實際對象模型......

+0

嗨泰倫感謝您的答覆。我已經用您的反饋更新了我的問題,但如果您有時間,我還有一個問題。謝謝! –

+0

@JodyHeavener一旦收到答案,就不會被視爲運動來改變問題。 – e4c5

+0

但問題是一樣的? –

相關問題