2015-05-21 2 views
0

У меня есть 2 модели пользователя и рейтинг выглядит следующим образом:рельсы вернуть список пользователей со средним рейтингом выше 5

class User < ActiveRecord::Base 
    has_many :ratings 
end 

class Rating < ActiveRecord::Base 
    belongs_to :user 
end 

Каждый пользователь получает несколько оценки от 1 - 10. Я хочу, чтобы вернуть все пользователи со средним рейтингом из> 5. у меня это до сих пор ...

User.joins(:ratings).where('rating > ?', 5) 

Но этот код возвращает все пользователи с любым рейтингом выше 5. Я хочу пользователей со средним рейтингом выше 5.

Я видел другое сообщение такие как this и that задают похожие вопросы, но сегодня у меня есть мозг, и я не могу имитировать их вопрос в соответствующий ответ.

ответ

0

Надеюсь, это поможет кому-то в будущем. Найдешь средний рейтинг каждого пользователя с помощью таблицы оценок и возврат всех пользователей со средней оценкой выше 5.

User.joins(:ratings).merge(Rating.group(:user_id).having('AVG(rating) > 5')) 

.having было мое недостающим звеном. Дополнительные примеры .having here и here

0

Для оценки пользователя вам необходимо определить средний метод.

Проверьте ссылку ниже, это хороший пример перемещения поплавка в среднем.

How do I create an average from a Ruby array?

+1

Я порван, я посетил эту тему, и это было действительно интересно. Я узнал совсем немного. Но вернувшись, я не вижу его применимости к вопросу ОП. Возможно, стоит расширить ваш ответ. –

+0

Согласен, у меня нет рубинового массива. У меня есть куча записей с рейтингами 1-10 и связь с таблицей User. Я хочу вернуть всех пользователей со средним рейтингом более 5. – thedanotto

1

Если вы смотрите на всех пользователей, поэтому присоединиться к первой?

@avg = Ratings.group(:user_id).average("rating") #returns hash which contains arrays 
@avg.each do |avg|        #0 is user_id, 1 is value 
    puts avg[0] if avg[1] > 5 
end 
+0

Спасибо человеку. Это меня намного ближе! 'ids = Rating.group (: user_id) .average (" рейтинг "). select do | item, val | val> 5 end ", чтобы найти пользователей, которые я делаю' User.where (id: ids.keys) 'Я чувствую, что это можно сделать только в одном из утверждений, начиная с User. – thedanotto

Смежные вопросы