2013-12-19 4 views
0

게시물을 통해 많은 사용자를 보유한 Thred 모델을 보유하고 있습니다.이 쿼리/코드를 개선 할 수 있습니까?

색인 템플릿에 모든 threds 인 @threds = Thred.allrender @threds을 가져옵니다.

그러나 나는 사용하여 현재 사용자가 threds의 각각의 응답 여부를 확인 : 다음과 같은 방법을 사용

if member && thred.user_posted?(current_user) 

:

def user_posted?(user) 
    users = [] 
    self.users.map { |u| users << u.id } 
    users.include?(user.id) 
    end 

그것은 작동하지만, 나는 궁금하고있다 그것을하는 더 효율적인 방법은 무엇입니까?

+4

이 질문은 그것이 [codereview.se] –

답변

1
def user_posted?(user) 
    user_ids = self.users.pluck(:id) 
    user_ids.include?(user.id) 
    end 

또는

def user_posted?(user) 
    self.users.where(id: user.id).any? 
    end 
+0

당신은 사용할 수 있습니다 요구되기 때문에 오프 주제 것으로 보인다'존재?'대신 어떤'의?'가능성이 얻을 수 더 나은 SQL. 비록 그것이 가치가 있는지 나는 모른다. –

+0

두 분 모두 고맙습니다 -'''존재하고 있습니까? "'''''''''선택 쿼리는 선택 카운트를 수행합니다 (그리고 나는 그것이 느릴 것이라고 생각합니까?) 둘 다 대략 같은 시간에 실행되는 것으로 보입니다 콘솔에서). – A4J

+0

네이티브 루비 메서드는 추가 SQL 쿼리가 없으면 Rails 메서드보다 빠릅니다. 또한 메모리 소비에도 영향을줍니다. – NARKOZ

관련 문제