2012-07-12 1 views
4

사용자가 내 블로그 게시물에 댓글을 쓸 수있게하기 위해 acts_as_commentable_with_threading 보석을 사용하고 있습니다.대부분의 댓글이 달린 오브젝트 가져 오기

내가 지금하고 싶은 것은 대부분의 댓글이 달린 게시물을 표시하는 것입니다. 그러나 나는 그들을 (그리고 내가 아는 한 보석은 그런 방법을 제공하지 않습니다.) 어떻게 쿼리하는지 모릅니다. 당신은 나에게 그와 같은 것을 달성하는 방법을 몇 가지 팁이나 아이디어를 쓸 수 있습니까?

답변

5

다음은 가장 많이 항목을 게시 한 최고 사용자를 반환하는 데 사용하는 방법입니다. 문제와 관련하여 도움이 될 수 있습니다. 내 측면 탐색 모음의 일부이며 웹 응용 프로그램의 모든 페이지에서 사용되기 때문에 이것을 응용 프로그램 도우미에 넣습니다. 내보기에서

def top_posters 
    User.all(:select => "users.*, COUNT(user_id) as post_count", 
     :joins => "LEFT JOIN posts AS posts ON posts.user_id = users.id", 
     :group => "posts.user_id", 
     :order => "post_count DESC", 
     :limit => 5) 
end 

, 나는 레일

<% top = top_posters() %> 
<% for t in top %> 
    <li><%= link_to t.username, user_path(t) %> 
     (<%= t.posts.public_posts.count %>)</li> 
<% end %> 
+0

그래, 내가 생각을 그거야 :) 나는 제 구현에서 오류를 발견 할 수 없습니다 : https://gist.github.com/3098896 시간과 욕망이 있다면 그것을 확인해보십시오. blem은이 쿼리가 완전히 잘못된'comments_count' number를 반환한다는 것입니다. – mbajur

+0

commentable_id는 다형성 디자인의 일부이고 기사와 ID가 일치하는 대상을 반환해야하기 때문에 생각합니다. 대상이나 출처 필드에 기사 이외의 다른 많은 것들이 있는지 데이터베이스를 점검하십시오. 따라서 기본적으로 동일한 ID를 가진 다른 모델과도 일치합니다. – kobaltz

+0

오, 맞아, 그걸 잊어 버렸어, 지금은 작동 중이다 :) 질문에 많은 // // 해결책을 주셔서 감사합니다. – mbajur

2

이 4+

당신은이 같은

사용해야 :

Article.select("articles.*, COUNT(commentable_id) as comments_count") 
        .joins("LEFT JOIN comments AS comments ON comments.commentable_id = articles.id") 
        .group("comments.commentable_id") 
        .order("comments_count DESC") 
        .where("commentable_type = 'Article'") 
        .limit(5) 
+1

그리고 원래의 질문에 게시 된 솔루션과 어떻게 다른가요? – mbajur