2015-10-29 3 views
2

У меня есть две модели/таблицы, школы и обзоры. Я хотел бы получить коллекцию объектов школы на основе минимального количества обзоров, а затем среднего значения столбца в обзорной таблице. В настоящее время мой запрос работает хорошо, и возвращает все школы, чтобы от 5,0 до сра нулей последних и выглядит следующим образом:Получение коллекции объектов на основе атрибута ActiveRecord и значений

School.joins('LEFT JOIN reviews ON schools.id = reviews.school_id') 
     .group('schools.id') 
     .order('AVG(reviews.overall_experience_rating) DESC NULLS LAST') 

однако, я хотел бы быть в состоянии иметь ограничитель здесь, что только выбирает школу объект, если он имеет 15 или больше обзоров, что-то вроде:

where("school.reviews.count >= 15") 

связь между двумя моделями в активной записи является один ко многим. Есть предположения?

+1

если вы настроите ваши отношения правильно, сделать * присоединиться * выглядеть лучше: '.joins (: отзывы)' - рельсы автоматически совершают магию –

ответ

1

Я понял, что использование having в ActiveRecord, что мне нужно:

School.joins(:reviews) 
    .group('schools.id') 
    .having("COUNT(reviews) > ?", 15) 
    .order('AVG(reviews.overall_experience_rating) DESC NULLS LAST') 
Смежные вопросы