2016-07-11 2 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 

어떻게이 경고를 줄일 수 있습니까? 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

하지만 질문은 똑같습니까? –

관련 문제