У меня есть следующие отношения: обсуждение, в котором есть сообщения, которые имеет has_many, комментарии: has_many
Я пытаюсь реализовать персонализированную панель пользователя, которая заказывает последние обсуждения в зависимости от самого последнего изменения пользователя в конкретном обсуждении, так что если пользователь создает сообщение в обсуждении, это обсуждение должно быть в верхней части панели мониторинга, и если пользователь делает комментарий к какой-либо из публикаций в данном обсуждении, это обсуждение также должно теперь находиться в верхней части его панели мониторинга.
До сих пор я могу заставить их работать только по отдельности, поэтому я изо всех сил стараюсь их объединить.
Только порядок по последнему сообщению:
@discussions = Discussion.joins(:posts).where(posts: {user: current_user}).group('discussions.id').order('MAX(posts.created_at) DESC')
Только порядок по последнему комментарию :
@discussions = Discussion.joins(:comments).where(comments: {user: current_user}).group('discussions.id').order('MAX(comments.created_at) DESC')
Моя попытка объединить их, что не работает:
@discussions = Discussion.joins(:posts,:comments).where(posts: {user: current_user}).where(comments: {user: current_user}).group('discussions.id').order('MAX(posts.created_at) DESC', 'MAX(comments.created_at) DESC')
Это работает только в зависимости от того, что я пишу на .order, но оба никогда не работают ..
Любая помощь будет высоко ценится или приветствуется любой другой способ достижения цели!
Обновление:
Вид Пользователь помог мне продвинуться немного дальше, но все еще не совсем результаты, которые я ищу
@discussions = Discussion.joins(:posts,:comments).where(posts: {user: current_user}).where(comments: {user: current_user}).group('discussions.id').order('GREATEST(MAX(posts.created_at), MAX(comments.created_at)) DESC')
Проблема здесь в том, что это работает, только если в обсуждении есть и сообщение, и комментарий, но я хочу если будет создан какой-либо из них, список обсуждений следует обновить, добавив самое последнее измененное обсуждение.