Предполагая, что у вас есть отношения has_many и own_to между двумя моделями, вы можете попробовать использовать (очень удобный) раздел MySQL GROUP BY, который поддерживается в Rails:
@hall_of_fame = Business.find(
:all,
:joins => :ratings,
:group => 'business_id',
:order => 'AVG(ratings.rating) DESC',
:limit => 10
)
Если вы хотите добавить среднюю оценку, вы можете включить ее в параметр: select следующим образом:
@hall_of_fame = Business.find(
:all,
:select => 'businesses.name, AVG(ratings.rating)'
:joins => :ratings,
:group => 'business_id',
:order => 'AVG(ratings.rating) DESC',
:limit => 10
)
Естественно, если между таблицами нет конфликтующих имен столбцов, вы можете безопасно удалить ведущие «предприятия». и "рейтинги". из параметров: select и: order.
Возможно, вы захотите создать метод с этим кодом в вашей модели вместо того, чтобы иметь его в контроллере, но это ваше дело.