2010-07-24 5 views
0

내가 Topic이라는 모델을 가지고 있다고 가정 해 봅시다. A 주제 has_many :topic_flags (TopicFlag는 부적절한 것으로 표시된 컨텐츠를 나타내는 데 사용됩니다). 내 질문은 이것입니다 : 대부분의 플래그가있는 주제를 선택하려면 어떻게해야합니까 (임의의 금액으로 제한되고 내림차순)? 나는 그것에 대해 잠시 생각해 보았고, SQL 쿼리를 해킹 할 수는 있지만 레일스를 사용하는 방식을 선호한다.가장 많이 찾는 주제를 찾는 방법

답변

1
class Topic < ActiveRecord::Base 
    has_many :topic_flags 

    named_scope :most_flags, lambda {|min_flags| {:joins => :topic_flags, 
               :group => "topic_flags.topic_id", 
               :order => "count(topic_flags.topic_id) desc", 
               :having => ["count(topic_flags.topic_id) >= ?", min_flags] }} 
end 

내부 조인을 사용하므로 플래그가 0 인 항목을 선택하지 않습니다. 너는 이것을 이렇게 부르는거야.

Topic.most_flags(3) # returns a sorted list of all topics with at least 3 flags. 
관련 문제