2016-04-02 2 views
0

У меня есть приложение rails, в котором есть пользователи, которые публикуют рецепты. Люди могут оставлять комментарии к рецептам с оценкой. Я хочу сортировать список пользователей (действие индекса) по средним значениям оценок, полученных по рецептам, отправленным ими.
Я уже сортировки списка recpes с помощью этого:ActiveRecord Закажите список моделей по соответствующей модели двух уровней

@courses = @recipes.joins(:comments).group('recipes.id').order('AVG(comments.rating)').reverse_order

Как я могу сделать что-то подобное (или нет) для пользователей?
Я попытался сделать это, используя соединения, группу и т. Д., Читая направляющие рельсов и apidock, но все еще не могу понять это.

ответ

0

попробуйте это, не уверен, что это совершенно правильно. Надеюсь, это полезно для вас.

User.joins(recipes: [:comments]).group('users.id').order('AVG(comments.rating) DESC') 

обновление

мои Модели пользователя, викторины, вопрос. Эта часть меня сбивает с толку, так это ваше определение пользователя. Являются ли пользователи, разместившие курсы, и пользователи, которые комментируют одну и ту же таблицу или отдельную таблицу? Отношения, которые я издеваюсь, это то, что я думаю почти точно так же, как ваши модели:

  1. Пользователь has_many викторины, и у пользователя есть вопросы.
  2. Quiz has_many вопросы и принадлежит пользователю.
  3. Вопросы принадлежат пользователю и принадлежат к викторине.

в этом случае, если я @users = User.joins(quizzes: [:questions]).group('users.id').order('AVG(questions.easy_count) DESC'), результат я получаю результат @users список пользователя, которому принадлежат викторинам упорядоченных по easy_count (в вашем случае рейтинге) вопросы принадлежит к соответствующей викторине.

описание кода

User.joins(quizzes: [:questions]) просто дает вам все ряды пользователей, которые имеет викторин (в вашем случае должны быть курсы), который имеет вопросы (в вашем случае должен быть комментарий). Рассмотрим следующий пример:

  1. user1 имеет quiz1
  2. quiz1 имеет Question1 и question2

результат, который вы получите от User.joins(quizzes: [:questions]) возвратит вас две дублирующие строки user1 (потому что user1 связано с двумя вопросами через quiz1)

group('users.id') затем собирается в группу результат от User.joins(quizzes: [:questions]) по user.id (вы хотите, чтобы получить список пользователей)

так что до сих пор то, что вы получаете, очень просто, это список пользователей, у которых есть викторины, и те викторины должны иметь хотя бы один вопрос, я уверен, что это владелец пользователя викторины, а не владелец пользователь вопросов.

затем в конце сортировать этот список по среднему easy_count вопросов (в вашем случае, оценка комментариев)

+0

Выполнения этой группе комментариев от пользователя проводки комментария. Комментарий принадлежит пользователю и курсу (здесь пользователь отправляет комментарий). Курс has_many комментариев, Пользователь has_many courses.hop это помогает –

+0

вы можете предоставить мне таблицу схем?так что я могу легко настроить его точно так же, как и вы, если у вас есть seed.rb, было бы замечательно –

+0

Поскольку вы не предоставили мне таблицу, я просто издевался над подобными образцовыми отношениями. см. обновление в моем ответе –

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