2014-11-15 4 views
0

친구들,이 쿼리를 만들기 위해 고심하고 있습니다. 하나의 스포츠와 1 개의 장소가 있으며, 둘 다 많은 활동을 할 수 있습니다. 특정 스포츠가 그 장소에서 연습 된 빈도를 기준으로 상위 10 개 장소를 선택하는 쿼리가 필요합니다. 나는 어디에서 오류가 발생합니다 : (: activities.sport_id => @ sport.id), 나는이 부분을 어떻게 할 수 있는지 알지 못한다.레일 쿼리는 많은 관계가 있습니다

class Activity < ActiveRecord::Base 
    has_one :sport 
    belongs_to :place 

class Sport < ActiveRecord::Base 
    has_many :activities, :class_name => "Activity", :foreign_key => "sport_id" 
    has_many :places, through: :activities 

class Place < ActiveRecord::Base 
    has_many :activities, :class_name => "Activity", :foreign_key => "place_id" 
    has_many :sports, through: :activities 

def show 
     @places = Place.where(:activities.sport_id => @sport.id).sort{ |a,b| b.activityfrequency(@sport.name) <=> a.activityfrequency(@sport.name)}.take(10) 
    end 

답변

4

아래와 같이 활성 레코드의 조인 기능을 사용해야합니다.

Place.joins (: activities, : sports) .order (: frequency) .limit (10)

관련 문제