2013-09-04 3 views
0

Мне удалось сделать запрос с объединенной таблицей. Интересно, как я мог бы добавить еще таблицу соединения (например publication_comments), Посчитайте, сколько комментариев публикация имеет, сумму publication_comments_count с reviews_count и порядка в DESC порядка.Запрос на присоединение к нескольким ассоциациям

Я прочитал руководство по направляющим и много примеров на stackoverflow, но все равно нужно, чтобы кто-то помогал в синтаксисе и как именно я должен собрать все части в одном месте. Благодарю.

@publication = Publication.all(
          joins: :reviews, 
          select: '"publications".*, count("reviews".id) as reviews_count', 
          group: '"publications".id', 
          order: "reviews_count DESC") 
+0

Я предлагаю вам на один шаг в то время, исключая, первым получить все из них, а затем попытаться сделать соединение, счетчик и т.д. Другим делом заключается в том, что если вы используете 'rails v> = 3', используйте новый синтаксис, не используйте' find' с 'select',' group', 'order' и т. д. внутри него. – MurifoX

+0

Я использую рельсы 3.2. Можете ли вы опубликовать ответ? – vitdes

ответ

0

ActiveRecord позволяет вам просто указать строку в метод объединения. Таким образом, вы можете просто написать сырой SQL условия соединения:.

Publication.select("..., COUNT(publication_comments.id) as pub_count") 
.join('JOIN reviews on (..) JOIN publication_comments') 
.group('publications.id' 
+0

Больше всего мне интересно, как я суммирую review_count и pub_count в запросе? Могу ли я использовать метод суммы или просто добавить их (как-то) и сделать заказ DESC? – vitdes

+0

На самом деле, чтобы посмотреть, сколько отзывов вы не хотите использовать для СУММ, но вместо этого укажите их (как в моем примере выше) - таким образом вы получите количество отзывов, а не сумму их значений идентификатора. – Tigraine

+0

В вопросе я использую счет также! Однако я спрашиваю, как сделать review_count + pub_count = sum? Эта сумма я бы использовал по порядку: «sum DESC» – vitdes