У меня есть приложение rails с моделью "recipes".Рецепт может понравиться («нравится» модель) пользователю.Чего я хотел бы достичь (в конце концов), так это отсортировать список рецептов на странице указателей рецептов по количеству лайков.
Я видел множество тем, но две из них мне подсказали больше всего.были:
Рельсы 3 ActiveRecord: порядок и группировка по количеству ассоциаций
Порядок рельсов по количеству результатов ассоциации has_many
У меня так далеко, что у меня есть SQL-запрос, который выдает список рецептов с подсчетом их лайков:
SELECT recipes.name, COUNT(likes.id)
FROM recipes
LEFT JOIN likes on recipes.id = likes.recipe_id
GROUP BY recipes.name
ORDER BY COUNT(likes.id) DESC;
Однако, когда «переводя» его на что-то, что ActiveRecord может понять, яЯ столкнулся с проблемами.
Я пришел к выводу, что использование Recipe.joins (: likes) или Recipe.left_joins (: likes) пропускает все столбцы, указанные в «recipes», что приводит к следующей ошибке:
"Столбец" recipes.id "должен появляться в предложении GROUP BY или использоваться в статистической функции ...".
Теперь, когда мне нужно передать recipes.name и COUNT (лайки.id) только я использовал select:
Recipe.select("recipes.name, COUNT(likes.id)").joins(:likes).group("recipes.name").order("COUNT(likes.id) DESC")
e Я застрял, поскольку он производит это:
ActiveRecord :: Relation [Идентификатор рецепта: ноль, имя: "Яичница-болтунья", Идентификатор рецепта: ноль, имя: "Суп", Идентификатор рецепта: ноль, имя: "Блинчики Nutella"]