Объединение нескольких ассоциаций в Rails

#mysql #ruby-on-rails #postgresql

#mysql #ruby-on-rails #postgresql

Вопрос:

Я пытаюсь объединить таблицы в идентификаторе модели posts, совпадающем с идентификатором комментария в модели комментариев. модель комментариев принадлежит модели post. мой активный запрос записи в контроллере:

     Post.joins(:comments)
  

Он генерирует запрос следующим образом

     SELECT "posts".* FROM "posts" INNER JOIN "comments" ON "comments"."post_id" = "post"."id"
  

но я не могу выбирать комментарии.Как я могу сгенерировать запрос, подобный приведенному ниже

  SELECT * FROM "posts" INNER JOIN "comments" ON "comments"."post_id" = "post"."id"    
  

Ответ №1:

Если вы хотите получить данные комментариев вместе с сообщениями, вы должны использовать .includes вместо .joins .

 Post.includes(:comments)
  

Естественно, что приведенное выше вернет некоторые сообщения, и вы сможете получить доступ к их комментариям через их отношение без очередного обращения к базе данных.

Здесь есть хорошая статья о includes vs joins .

Комментарии:

1. @dinnesh Если этого ответа было достаточно для решения вашего вопроса, пожалуйста, подумайте о его принятии.

2. Нет, Алекс, он генерирует запрос, подобный этому, ВЫБЕРИТЕ «сообщения».* В разделе «сообщения» ВЫБЕРИТЕ «комментарии».* ИЗ «комментариев», ГДЕ «комментарии».»post_id» В (1, 2, 3), но он отображает результаты так же, как и ВЫБЕРИТЕ «сообщения».* ИЗ столбца комментариев «сообщения» не загружается

3. Это должно позволить вам загружать комментарии через сообщения. Post.includes(:comments).first.comments следует вывести комментарии к первому сообщению.

4. Спасибо за ваши ответы. Я уже пробовал с этим Post.includes(:comments).first.comments Алекс, он отображает только столбцы комментариев, а не столбцы сообщений.

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