#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, модель комментариев. Но я сталкиваюсь с проблемой выбора только заголовка, тела из сообщения или комментария из модели комментариев.